fopen / fdopen冻结破损的网络共享或删除了USB设备

时间:2017-07-03 23:40:42

标签: c linux fopen

我正在为C中的嵌入式Linux设备构建后台服务。 每小时从网络共享或USB设备读取文件, 但如果网络或USB设备被拔出,fopen永远不会返回 并且服务冻结了。我不允许使用像pthread或fork这样的异步方法来读取该文件,所以我正在寻找一个带有超时或非阻塞的解决方案来测试文件(或设备)是否可用。

以下代码示例在fopen / fdopen上冻结。

FILE* f = fopen("/path/to/file", "r"); //freezes if device not available;
if(f)
{
    < .. read file .. >
    fclose(f);
}

////////////////////////////////////////////

FILE* f = NULL;
int fd  = open("/path/to/file", O_RDONLY|O_NONBLOCK);
if(fd>=0)
{
    f= fdopen(fd, "r");//freezes if device not available
}

if(f)
{
    < .. read file .. >
    fclose(f);
}
else
{
    if(fd>=0){close(fd);}
}

编辑: fopen does not return的答案无法解决我的问题。我知道为什么会这样,但服务不能等待无响应的设备。如上所述,我需要一个非阻塞解决方案或超时。

0 个答案:

没有答案