【问题标题】:open read file with file descriptor使用文件描述符打开读取文件
【发布时间】:2016-10-03 11:49:46
【问题描述】:

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

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

问题出在哪里?

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 是结构体并声明为外部

在其他功能中,我使用

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

当 protocolType 被指定为 _BLOC 文件是打开阻塞,但是当我从另一个函数读取它时它返回空数据并且读取大小返回变量的最大值。

【问题讨论】:

  • 粘贴您的代码 - 没有它就很难提供帮助
  • 代码只是简单的打开阅读,如下

标签: c linux file posix file-descriptor


【解决方案1】:
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 是结构体并声明为外部

在其他功能中,我使用

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

当 protocolType 被指定为 _BLOC 文件是打开阻塞,但是当我从另一个函数读取它时它返回空数据并且读取大小返回变量的最大值。

【讨论】:

    猜你喜欢
    • 2011-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多