您的位置:首页 > 其它

文件非阻塞状态打开后改变为阻塞状态

2012-05-10 12:37 381 查看
fcntl函数中F_SETFL 设置文件描述词状态旗标,参数arg为新旗标,但只允许O_APPEND、O_NONBLOCK和O_ASYNC位的改变,其他位的改变将不受影响。

所以如果打开文件时是用非阻塞状态打开的:

open("/dev/tty",O_RDWR|O_NOCTTY|O_NDELAY);

则可以用fcntl改变文件状态标志:fcntl(fd, F_SETFL, 0);--改变文件为阻塞状态。

或者麻烦点,但易于理解:

1、获取文件的flags,即open函数的第二个参数:

flags = fcntl(fd,F_GETFL,0);

2、设置文件的flags:

fcntl(fd,F_SETFL,flags);

3、增加文件的某个flags,比如文件是阻塞的,想设置成非阻塞:

flags = fcntl(fd,F_GETFL,0);

flags |= O_NONBLOCK;

fcntl(fd,F_SETFL,flags);

4、取消文件的某个flags,比如文件是非阻塞的,想设置成为阻塞:

flags = fcntl(fd,F_GETFL,0);

flags &= ~O_NONBLOCK;

fcntl(fd,F_SETFL,flags);

对普通文件的读写不存在阻塞问题,对和终端、网络连接等对应的文件描述符才会阻塞
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐