设置文件描述符为非阻塞状态

在编程中,阻塞是指当一个操作无法立即完成时,程序会暂停执行,直到操作完成为止。而非阻塞模式则允许程序继续执行,而不必等待操作完成。

一、setnonblocking 函数介绍

setnonblocking 函数会改变文件描述符属性, 将其设置为非阻塞状态。在非阻塞状态下,当某个操作无法立即完成时,该操作会立即返回一个错误码,而不会暂停程序的执行。以下为示例代码:

#include <fcntl.h>
void setnonblocking(int fd){
    fcntl(fd, F_SETFL, fcntl(fd, F_GETFL) | O_NONBLOCK);
}

使用setnonblocking 函数需要注意的问题:

    • 非阻塞模式下的操作返回错误码并不表示操作失败,只是表示该操作无法立即完成。
    • 非阻塞模式下的程序需要使用适当的技术来处理未完成的操作。

二、fcntl 函数介绍

在以上代码段中还包含了另一个函数fcntl, fcntl 函数可以用来改变文件描述符的属性。

#include<unistd.h>
#include<fcntl.h>
int fcntl(int fd, int cmd);
int fcntl(int fd, int cmd, long arg);
int fcntl(int fd, int cmd ,struct flock* lock);
int fcntl(int fd, int cmd, ... /* arg */ );

参数介绍:

fd : 文件描述符

cmd : 设置的命令

常用的命令:

F_GETFL 取得文件描述符状态flags,此flags为open()的参数。

F_SETFL 设置文件描述符状态flags,参数arg为新flags,但只允许O_APPEND、O_NONBLOCK和O_ASYNC位的改变,其他位的改变将不受影响。

arg :可有可无

返回值:

文件状态标志, -1表示失败。

  • 20
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值