fcntl
是一个用于文件描述符操作的 C 库函数,它提供了一系列操作文件描述符的功能,如改变文件描述符的属性、获取和设置文件描述符的标志等
#include <iostream>
#include <fcntl.h>
#include <unistd.h>
#include <sys/stat.h>
int main() {
int fd = open("test.txt", O_RDWR | O_CREAT, S_IRUSR | S_IWUSR); // 打开或创建一个名为 test.txt 的文件,赋予读写权限
if (fd == -1) {
std::cerr << "Error opening or creating file" << std::endl;
return 1;
}
// 设置文件描述符为非阻塞模式
int flags = fcntl(fd, F_GETFL, 0);
if (flags == -1) {
std::cerr << "Error getting file flags" << std::endl;
close(fd);
return 1;
}
if (fcntl(fd, F_SETFL, flags | O_NONBLOCK) == -1) {
std::cerr << "Error setting file non-blocking mode" << std::endl;
close(fd);
return 1;
}
// 其他文件操作...
close(fd); // 关闭文件描述符
return 0;
}
在这个示例中,我们首先使用 open
函数打开或创建一个名为 test.txt
的文件,并赋予读写权限。然后,我们使用 fcntl
函数获取当前的文件标志(F_GETFL
),将其与 O_NONBLOCK
标志进行按位或操作,然后将结果设置回文件标志(F_SETFL
),从而将文件设置为非阻塞模式。最后,在完成所有操作后,我们使用 close
函数关闭文件描述符。
需要注意的是,fcntl
函数的返回值可能为 -1,表示操作失败。在这种情况下,我们需要检查错误代码并采取相应的措施。