我在C程序中使用“fopen”以只读模式(r)打开文件。但在我的例子中,我观察到fopen呼叫不会返回。它不返回NULL或有效指针-执行在fopen调用时会被阻塞。该修补程序的文件是绝对正确的(我已经验证过),并且没有权限相关的问题。有谁能说出这种行为的原因是什么?任何帮助都是值得赞赏的。有什么与gcc或滑翔有关的吗?
编辑
下面是示例代码
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__);当我运行这段代码时,我只得到第一次打印(在调用fopen之前),在该程序停止之后。所以fopen没有完成它的操作。该文件是一个具有'.conf‘扩展名的简单配置文件,该文件可以通过其他方式打开,如vi、cat等。不应该存在任何NFS相关问题。文件系统是ext3。
提前谢谢你,苏维克
发布于 2010-12-20 21:58:32
以下是几个原因:
发布于 2010-12-20 15:15:12
那又怎么样?允许fopen阻塞,直到文件被打开,或者直到确定访问被拒绝为止。如果您有一个缓慢的存储设备,等待它变得可用是绝对正确的。但这是操作系统问题,而不是C问题。
发布于 2010-12-20 20:28:10
您是否可能在保留名称空间中重新定义了符号:以两个下划线、下划线和大写字母开头的符号,还是任何标准C库函数?如果是这样的话,这会导致未定义的行为,而且fopen可能会以某种方式调用代码的一部分,而不是标准库中的正确代码。
这个问题有很大的“信息缺失”的味道。我非常怀疑问题中的代码片段是否具有OP在main中单独出现时所描述的行为,并且不知道OP是否做了一些他没有告诉我们的虚假的事情。
https://stackoverflow.com/questions/4490343
复制相似问题