【Linux C | 文件I/O】fcntl函数详解 | 设置描述符非阻塞、文件(记录)锁
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdlib.h>
int main() {
int fd;
fd = open("test.txt", O_RDWR | O_CREAT, 0666);
if (fd < 0) {
perror("open");
exit(1);
}
// 设置文件描述符为非阻塞模式
int flags = fcntl(fd, F_GETFL);
if (flags < 0) {
perror("fcntl F_GETFL");
exit(1);
}
if (fcntl(fd, F_SETFL, flags | O_NONBLOCK) < 0) {
perror("fcntl F_SETFL O_NONBLOCK");
exit(1);
}
// 获取并设置文件锁
struct flock lock;
lock.l_type = F_WRLCK; // 写锁
lock.l_whence = SEEK_SET;
lock.l_start = 0; // 锁定从文件开头起始
lock.l_len = 0; // 锁定整个文件
if (fcntl(fd, F_SETLK, &lock) < 0) {
perror("fcntl F_SETLK");
exit(1);
}
close(fd);
return 0;
}
这段代码首先使用open系统调用创建或打开一个文件,然后使用fcntl函数获取并设置文件描述符的状态标志,使其为非阻塞模式。接着,使用fcntl函数对文件设置写锁。最后,关闭文件描述符并退出。这个例子展示了fcntl函数在设置文件属性和加锁方面的应用。
评论已关闭