【问题标题】:open64() fails with ENOENT, even though the file exists即使文件存在,open64() 也会因 ENOENT 而失败
【发布时间】:2010-10-07 04:40:05
【问题描述】:

我正在尝试打开我刚刚使用 open64() 创建的文件。但是,当我尝试打开文件时,系统调用失败并显示 ENOENT。我知道文件存在的事实,因为我刚刚创建了它,并且 ls 将它显示在它应该在的目录中。当我尝试使用 open() 打开它时,它会因 EOVERFLOW 而失败,这是预期的,但它也意味着文件存在。有任何想法吗?

const char* filename = pDt->evtfname;
int evtFile;
evtFile = open64(filename, O_RDONLY); 
perror("The following error occurred");

【问题讨论】:

  • 你确定文件名引用了文件的路径,而不仅仅是没有目录的文件名吗?
  • 是的,我确定。我已经用gdb来验证了。
  • 当您尝试使用open()open64() 打开文件时,文件名是否每次都完全相同?
  • 是的。 (字符限制的垃圾)
  • 这是一个附带问题,但你永远不应该写open64。使用适合 64 位 off_t 的编译环境编译您的程序。在 Linux 上,这意味着在您的 CFLAGS 中使用 -D_FILE_OFFSET_BITS=64

标签: c file-io


【解决方案1】:

什么是 evtFile 值?你不检查它。 errno 仅在 evtFile 时有效

【讨论】:

  • 伟大的斯科特。现在是 7。感谢您的帮助。我想我的印象是如果成功,每次系统调用都会重置 errno。
猜你喜欢
  • 1970-01-01
  • 2016-01-08
  • 2015-06-25
  • 2014-12-03
  • 1970-01-01
  • 2017-07-15
  • 1970-01-01
  • 2023-04-07
相关资源
最近更新 更多