fcntl
是一个用于文件描述符操作的 C 库函数,它提供了一系列操作文件描述符的功能,如改变文件描述符的属性、获取和设置文件描述符的标志等
#include#include #include #include 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,表示操作失败。在这种情况下,我们需要检查错误代码并采取相应的措施。