c - 使用文件描述符打开读取文件

标签 c linux file posix file-descriptor

我使用的驱动程序有很多文件,每个文件都有一个 ID,当我打开这些文件时,我将文件描述符存储在 strcut 数组中,其中包含带有文件描述符的 ID,每个打开的文件都可以是阻塞的或不是。

我想从另一个程序或程序中的其他函数读取文件,当我尝试使用其文件描述符读取阻塞文件时,它不会仍然阻塞,直到我对其进行写入,它不返回任何数据在缓冲区中,但是当我在同一个函数中使用它时它仍然阻塞。

问题出在哪里?

if (vg_bufObj[indice].protocolType == _NO_BLOC) 
vg_bufObj[indice].dev_fd = open(d_path, O_RDONLY | O_NONBLOCK);
else
vg_bufObj[indice].dev_fd = open(d_path, O_RDONLY);

vg_bufObj 是结构体并声明为 extern

在其他函数中我用

读取文件
read_size = read(vg_bufObj[indice].dev_fd, data, 8);

当协议(protocol)类型指定为_BLOC时,文件处于打开阻塞状态,但是当我从另一个函数读取它时,它返回空数据,并且读取大小返回变量的最大值。

最佳答案

if (vg_bufObj[indice].protocolType == _NO_BLOC) 
vg_bufObj[indice].dev_fd = open(d_path, O_RDONLY | O_NONBLOCK);
else
vg_bufObj[indice].dev_fd = open(d_path, O_RDONLY);

vg_bufObj 是结构体并声明为 extern

在其他函数中我用

读取文件
read_size = read(vg_bufObj[indice].dev_fd, data, 8);

当协议(protocol)类型指定为_BLOC时,文件处于打开阻塞状态,但是当我从另一个函数读取它时,它返回空数据,并且读取大小返回变量的最大值。

关于c - 使用文件描述符打开读取文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39830906/

相关文章:

c - 按位 C 运算

c# - 将 C Union 转换为 C#(未正确对齐)

jquery - 如何更新blueimp jquery文件上传以使用Bootstrap 4+

c - 从文件中读取一个数字并将其转换为 C 中的整数

ruby - 用 ruby​​ 读取多行字符串,被 "\"破坏

c++ - 回历(伊斯兰)日历问题!

c - 在C中获取当前时间

Linux ELF 文件段名称

linux - 在 EC2 (Amazon Linux) 上安装 postgres

Linux 脚本——从详细日志中提取基于模式的数据的最佳方式