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,比...
其中F_DUPFD功能类似于dup操作,可以返回一个新描述符,与原始操作符共享相同的属性。F_GETFD用于设置close-on-exec标志,创建子进程时若调用execl,该标志将被设置。F_GETFL和F_SETFL用于设置或获取文件标志,如O_NONBLOCK(非阻塞I/O)、O_APPEND(强制每次写操作添加在文件末尾)、O_DIRECT(最小化...
下面的例子使用F_GETFL和F_SETFL这两种fcntl 命令改变STDIN_FILENO的属性,上O_NONBLOCK选项,实现非阻塞读终端的功能。 #include<unistd.h>#include<fcntl.h>intfcntl(intfd,intcmd, .../* arg */); 功能: 改变文件属性 参数: fd:文件描述符 cmd:设置的命令 F_GETFL F_SETFL arg:可有可无,由第二个参数...
不能只是执行F_SETFD或F_SETFL命令,这样会关闭以前设置的标志位。 flags = fcntl(sockfd, F_GETFL, 0); //获取文件的flags值。 fcntl(sockfd, F_SETFL, flags | O_NONBLOCK); //设置成非阻塞模式; flags = fcntl(sockfd,F_GETFL,0); fcntl(sockfd,F_SETFL,flags&~O_NONBLOCK); //设置成阻塞模式; ...
1、获取文件的flags,即open函数的第二个参数: flags = fcntl(fd,F_GETFL,0); 2、设置文件的flags: fcntl(fd,F_SETFL,flags); 3、增加文件的某个flags,比如文件是阻塞的,想设置成非阻塞: flags = fcntl(fd,F_GE
确实是用F_GETFL,但是很多人都用成F_GETFD。我们一个师兄很牛的一个人,也用错了。网上好多人都你抄我,我抄你。但是fcntl(sockfd, F_SETFL, fcntl(sockfd, F_GETFD, 0)|O_NONBLOCK)最后执行的结果应该是一样的,确实设为非阻塞了。所以很多人都认为正确的。唉。steven先生那本书写的很明明...
F_GETFL 取得fd的文件状态标志,如同下面的描述一样(arg被忽略)F_SETFL 设置给arg描述符状态标志,可以更改的几个标志是: O_APPEND, O_NONBLOCK,O_SYNC和O_ASYNC http://www.91linux.com/html/article/program/cpp/20090207/15707.html ...
flags = fcntl(fd,F_GETFL,0); flags &= ~O_NONBLOCK; fcntl(fd,F_SETFL,flags); 获取和设置文件flags举例:: char buf[500000]; int main(int argc,char *argv[]) { int ntowrite, nwrite; const char *ptr ; int flags; ntowrite = read(STDIN_FILENO,buf,sizeof(buf)); ...
Ruby IO streams can be set to nonblock by using the fcntl library and calling IO#fcntl as shown below: require 'fcntl' # get current flags flags = write.fcntl(Fcntl::F_GETFL) # set O_NONBLOCK flag write.fcntl(Fcntl::F_SETFL, flags | (Fcn...