如何检查一个文件是否存在c

我有核心文件生成与附加到其名称的PID或有时只有名称的核心。 我需要检查一个文件是否以名称core.pidcore存在。 我已经尝试使用stat() ,我使用pathstring作为/tmp/core* ,但失败。 你能不能让我知道如何解决这个问题。谢谢你的时间。

Solutions Collecting From Web of "如何检查一个文件是否存在c"

由于您正在使用Linux,因此您可以使用

http://man7.org/linux/man-pages/man3/glob.3.html

glob会读取一个目录并返回一个匹配模式的名字列表,这正是你想要的。

您也可以使用http://man7.org/linux/man-pages/man7/inotify.7.html只读取目录更改。

您可以使用access功能:

 if (0 == access(path, 0)) { file exists; } else { file does not exist; } 

看起来这已经被回答了 。 虽然stat()是可以接受的,如果你只是检查存在,我会使用access() ( docs )

如果您只想检查是否有新文件出现,请使用<dirent.h> API( opendir()readdir()等)获取崩溃前后目录中的文件列表,然后比较这两个列表,看看在第二次检查后是否有更多的文件,如果是的话,哪一个是。

你只需要stat()两个可能的名字, core.pidcore ,看看是否有一个(或两者)存在。

你尝试stat() /tmp/core*表明你期望stat()接受一个shell glob模式。 任何系统调用都不接受Shell glob模式。 有一个C库函数fnmatch允许你解决它们,你可以使用这个…但在这种情况下,因为你只是检查两个不同的文件名,所以只需一次检查它们就可以更容易和更高效。

编辑 :如果你事先不知道实际的文件名,但你只知道它开始于core. 然后是一个数字,那么你将不得不用opendir打开目录,用readdir枚举其中的所有文件,看看它们中的任何一个是否与所需的模式相匹配(你可以使用fnmatch或者解析它手动地)。

我相信简单的方法是使用fopen()。

 FILE *fp; // fopen won't work on "r" mode if file doesn't exist fp = fopen("core.pid","r"); if(fp == NULL){ // File doesn't exist ... }else{ // File does exist ... } 

如果第二个参数是F_OK,访问只是检查文件的存在。 如果文件存在,则返回值为0; 如果不是,返回值是-1,errno设置为ENOENT。 请注意,如果文件路径中的某个目录不可访问,则可以将errno设置为EACCES。

从“高级Linux编程”一书 。