-1

我基本上是在尝试检查特定文件是否存在。为此,我正在使用 Unix 的 test 命令。

 sprintf(execbuf, "%s if test -r %s ; then true; else exit; fi;",
         execbuf, st->file, NO_FILE);

它工作正常,但如果文件不在这里,我不想退出,而是应该返回 FAIL。

我无法弄清楚如何使程序返回失败。我正在考虑使用上述命令的退出代码,但我仍然无法弄清楚如何在程序中的 Linux 命令之外使用该退出代码。

4

2 回答 2

4

我建议您只使用access () 调用,而不是执行外部 shell 命令来解决这个问题。

请注意,这种情况会受到竞争条件的影响 - 当您调用 access() 时文件可能存在(或执行确定文件是否存在的 shell 命令),但当您稍后真正需要它时它可能会消失。如果这对您来说是个问题,只需 open() 文件,然后在您实际需要 I/O 时使用文件描述符。

于 2012-09-10T17:42:03.247 回答
1

如果你现在还没有结婚,那么我建议使用 stat:

#include <sys/stat.h>
#include <stdio.h>

int main (int argc, char** argv[])
{
  struct stat sts;
  if (stat(argv[1], &sts) == -1 && errno == ENOENT)
      printf ("The file %s doesn't exist...\n", argv [1]);
  else
      printf("The file exists\n");

这会告诉你它是否存在。如果你不想传递命令行,参数 1 是一个 const char*,所以只需传递文件名。

于 2012-09-10T17:46:36.280 回答