当前位置: 技术问答>linux和unix
linux C socke编程 创建的socket默认是阻塞的还是非阻塞的?
来源: 互联网 发布时间:2016-11-28
本文导语: 如题,谢谢 | 默认是阻塞的 | 正解,因此如果需要设置为非阻塞的,则需要使用其他控制函数了. | 阻塞 +1 | en | STDIN_FILENO在程序启动时已经...
如题,谢谢
|
默认是阻塞的
|
正解,因此如果需要设置为非阻塞的,则需要使用其他控制函数了.
|
阻塞 +1
|
en
|
STDIN_FILENO在程序启动时已经被自动打开了,而我们需要在调用open时指定O_NONBLOCK标志。这里介绍另外一种办法,可以用fcntl函数改变一个已打开的文件的属性,可以重新设置读、写、追加、非阻塞等标志(这些标志称为File Status Flag),而不必重新open文件。
#include
#include
int fcntl(int fd, int cmd);
int fcntl(int fd, int cmd, long arg);
int fcntl(int fd, int cmd, struct flock *lock);这个函数和open一样,也是用可变参数实现的,可变参数的类型和个数取决于前面的cmd参数。下面的例子使用F_GETFL和F_SETFL这两种fcntl命令改变STDIN_FILENO的属性,加上O_NONBLOCK选项,实现和例 28.3 “非阻塞读终端”同样的功能。
#include
#include
int fcntl(int fd, int cmd);
int fcntl(int fd, int cmd, long arg);
int fcntl(int fd, int cmd, struct flock *lock);这个函数和open一样,也是用可变参数实现的,可变参数的类型和个数取决于前面的cmd参数。下面的例子使用F_GETFL和F_SETFL这两种fcntl命令改变STDIN_FILENO的属性,加上O_NONBLOCK选项,实现和例 28.3 “非阻塞读终端”同样的功能。