阻塞模式:O_NONBLOCK

 例如

fd = open(“文件路径”,O_RDONLY | O_NONBLOCK)  
//只读,非阻塞打开文件

在open函数中当不写O_NONBLOCK参数时会默认使用阻塞方式打开文件,用位或的方式加上 O_NONBLOCK参数就可设置为非阻塞式打开。

阻塞模式下时用read函数读取文件数据时文件有数据时则返回数据,文件内没有内容时则等待,如果是写操作时和读操作一样也会停留等待,这样的后续的程序无法执行,如果我们想要采用轮询的方式访问外接设备时,显而易见阻塞模式下无法实现轮询的操作。这时我们就需要用到非阻塞方式打开文件了,非阻塞模式下如果读操作没有读取到数据不会等待会立即返回一个错误信息,然后继续向下执行程序。

open函数的定义和参数

open函数的定义和参数原型如下: 

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode); 

open函数参数:*pathname为文件的路径,flag 为打开文件的方式或操作,mode参数在创建新文件时用来设置新文件的权限。

其中flag参数如下:

O_RDONLY:只读模式

O_WRONLY:只写模式

O_RDWR:可读可写

这三个是必要参数且只能选其一。

O_APPEND : 表示追加,如果原来文件里面有内容,则这次写入会写在文件的最末尾。
O_CREAT :表示如果指定文件不存在,则创建这个文件。
O_EXCL :表示如果要创建的文件已存在,则出错,同时返回 -1,并且修改 errno 的值。
O_TRUNC:表示截断,如果文件存在,并且以只写、读写方式打开,则将其长度截断为0。
O_NOCTTY: 如果路径名指向终端设备,不要把这个设备用作控制终端。
O_NONBLOCK: 如果路径名指向 FIFO/块文件/字符文件,则把文件的打开和后继 I/O设置为非阻塞模式。

以上参数作为选用参数用位或 | 连接

如:fd=open("文件名",O_RDONLY | O_APPEND);

 

Logo

更多推荐