然后使用fcntl系统调用中的F_GETFL操作来获取文件描述符当前的状态标志,并将其与O_NONBLOCK属性进行或操作,以将文件描述符设置为非阻塞模式。最后使用F_SETFL操作来将设置后的状态标志写入文件描述符中。这样就成功将文件描述符设置为非阻塞模式了。 除了非阻塞模式之外,fcntl系统调用还可以设置文件的其它状态标志,比如...
int fcntl(int fd, int cmd, ... /* arg */ ); 其中,操作类型由cmd决定。cmd可取如下值: F_DUPFD:复制文件描述符 F_DUPFD_CLOEXEC:复制文件描述符,新文件描述符被设置了close-on-exec F_GETFD:读取文件描述标识 F_SETFD:设置文件描述标识 F_GETFL:读取文件状态标识 F_SETFL:设置文件状态标识 F_GETLK...
fcntl(socket, F_SETFL, flags | O_NONBLOCK); 将非阻塞的设置回阻塞可以用 int flags = fcntl(socket, F_GETFL, 0); fcntl(socket, F_SETFL, flags & ~O_NONBLOCK); 功能描述:根据文件描述词来操作文件的特性。 用法: int fcntl(int fd, int cmd); int fcntl(int fd, int cmd, long arg); int...
intfcntl(intfd,intcmd, .../*arg*/); 其中,操作类型由cmd决定。cmd可取如下值: F_DUPFD:复制文件描述符 F_DUPFD_CLOEXEC:复制文件描述符,新文件描述符被设置了close-on-exec F_GETFD:读取文件描述标识 F_SETFD:设置文件描述标识 F_GETFL:读取文件状态标识 F_SETFL:设置文件状态标识 F_GETLK:如果已经被...
2. 使用fcntl设置 将socket设置为非阻塞的 代码语言:javascript 代码运行次数:0 运行 if((nFlags = fcntl (nSock, F_GETFL,0))<0) return0; nFlags = nFlags | O_NONBLOCK; if(fcntl (nSock, F_SETFL, nFlags)<0) return0; 将socket设置为阻塞的 ...
// 更改socket为nonblockfcntl(sock_fd, F_SETFL, fdflags | O_NONBLOCK); // connect ... while(1) { int recvlen = recv(sock_fd, recvbuf, RECV_BUF_SIZE) ; ... } ... 由于网络协议非常复杂,内核里面用到了大量的面向对象的技巧,所以我们从创建连接开始,一步一步追述到最后代码的调用点。 so...
if(fcntl(fd,F_SETFL,0) < 0){//阻塞,即使前面在open串口设备时设置的是非阻塞的,这里设为阻塞后,以此为准 printf("fcntl failed\n"); } else{ printf("fcntl=%d\n",fcntl(fd,F_SETFL,0)); } } if(isatty(STDIN_FILENO) == 0){
一、fcntl函数 功能:操纵文件描述符,改变已打开的文件的属性 int fcntl(int fd, int cmd, ... /* arg */ ); cmd的取值可以如下: 复制文件描述符 F_DUPFD (long) 设置/获取文件描述符标志 F_GETFD (void) F_SETFD (long) 设置/获取文件状态标志 F_GETFL (void) F_SETFL (long) ...
fcntl函数有5种功能: 1. 复制一个现有的描述符(cmd=F_DUPFD). 2. 获得/设置文件描述符标记(cmd=F_GETFD或F_SETFD). 3. 获得/设置文件状态标记(cmd=F_GETFL或F_SETFL). 4. 获得/设置异步I/O所有权(cmd=F_GETOWN或F_SETOWN). 5. 获得/设置记录锁(cmd=F_GETLK , F_SETLK或F_SETLKW). ...
1 fcntl(STDIN_FILENO, F_SETOWN, getpid()); //设置本进程为STDIN_FILENO文件的拥有者,没有这一步,内核不会知道应该将信号发给哪个进程 2 oflags = fcntl(STDIN_FILENO, F_GETFL); //获取设备文件的f_flags 3 fcntl(STDIN_FILENO, F_SETFL, oflags | FASYNC); //为了启用异步通知机制,还需对设备设置...