fopen没有回来

Sou*_*vik 9 c linux fopen

我在C程序中使用'fopen'以只读模式(r)打开文件.但在我的情况下,我发现fopen电话不会返回.它不返回NULL或有效指针 - 执行在fopen调用时被阻止.文件补丁是绝对正确的(我已经验证过)并且没有与权限相关的问题.任何人都可以告诉我这种行为可能是什么原因.任何形式的帮助都是值得的.有什么与gcc或glibc有关吗?

编辑

这是示例代码

printf("%s %d\n",__FUNCTION__,__LINE__);
if ((fp = fopen(argv[1], "r")) == NULL) {
   printf("%s %d\n",__FUNCTION__,__LINE__);
   return;
}
printf("%s %d\n",__FUNCTION__,__LINE__);
Run Code Online (Sandbox Code Playgroud)

当我运行此代码时,我只获得第一个打印(在调用fopen之前),然后该程序停止.所以fopen没有完成它的操作.该文件是一个扩展名为".conf"的简单配置文件,该文件可以通过vi,cat等所有其他方式打开.不应该有任何NFS相关问题.文件系统是ext3.

在此先感谢Souvik

nos*_*nos 7

这有以下几个原因:

  • 你已经在某个地方破坏了内存,所有的赌注都关闭了(通过valgrind运行你的程序)
  • 你在信号处理程序中调用此代码,fopen()不是信号异步安全,所以真的发生任何事情(由于FILE*内部互斥锁导致的死锁很常见)
  • 该文件是fifo,在这种情况下打开文件将阻塞,直到有人在另一端打开文件(读/写)
  • 该文件位于陈旧的NFS安装上.
  • 该文件是一个字符/块特殊文件,其语义可以打开块直到发生有趣的事情,


use*_*515 2

所以呢?fopen 可以阻塞,直到文件被打开,或者直到确定访问被拒绝为止。如果您的存储设备速度较慢,那么等待它可用是绝对正确的。但这是操作系统的问题,而不是 C 的问题。