fcntl
我在执行函数时遇到了一个问题stdin
,当我将stdin
FD 状态标志设置为时O_NONBLOCK
,它运行良好,但在副作用范围内。stdout 和 stderr 的状态标志也更改为O_NONBLOCK
.
我调查了函数的源代码fcntl
,但没有任何帮助。还有stackoverflow或谷歌。我认为它可能与内核或 glibc 实现有关。SYSCALL_DEFINE3
do_fcntl
我的电脑是 x86_64 上的 Ubuntu 12.04,安装在 gcc 4.6.3 内。
int flag = 0;
int value = O_NONBLOCK;
int fd = open("./tmp", O_RDONLY);
if(-1 == (flag = fcntl(fd, F_GETFL)))
fprintf(stdout, "%d:%s\n", errno, strerror(errno));
flag = fcntl(stdin->_fileno, F_GETFL);
flag = fcntl(stderr->_fileno, F_GETFL);
if(-1 == (flag = fcntl(stdout->_fileno, F_GETFL)))
fprintf(stdout, "%d:%s\n", errno, strerror(errno));
flag = fcntl(stdout->_fileno, F_SETFL, flag | O_NONBLOCK);
flag = fcntl(fd, F_GETFL);
flag = fcntl(stdin->_fileno, F_GETFL);
flag = fcntl(stdout->_fileno, F_GETFL);
flag = fcntl(stderr->_fileno, F_GETFL);
flag = fcntl(stdin->_fileno, F_SETFL, flag | O_APPEND);
flag = fcntl(fd, F_GETFL);
flag = fcntl(stdin->_fileno, F_GETFL);
flag = fcntl(stdout->_fileno, F_GETFL);
flag = fcntl(stderr->_fileno, F_GETFL);
close(fd);
这是我解决这个问题的代码。