-1

基本的に、特定のファイルが存在するかどうかを確認しようとしています。そのために、Unix の test コマンドを使用しています。

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

正常に動作しますが、ファイルがここにない場合は終了したくなく、FAIL を返す必要があります。

プログラムが FAIL を返すようにする方法がわかりません。上記のコマンドの終了コードを使用することを考えていましたが、プログラム内の Linux コマンドの外でその終了コードを使用する方法をまだ理解できていません。

4

2 に答える 2

4

これを理解するために外部シェルコマンドを実行せずに、 access ()呼び出しを使用することをお勧めします。

このような場合は競合状態の影響を受けることに注意してください。access()を呼び出したとき(またはファイルが存在するかどうかを判断するシェルコマンドを実行したとき)にファイルが存在する可能性がありますが、後で実際に必要になったときにファイルがなくなる可能性があります。それが問題になる場合は、ファイルをopen()し、後でI/Oに実際に必要になったときにファイル記述子を使用します。

于 2012-09-10T17:42:03.247 に答える
1

あなたが今していることと結婚していない場合は、統計を使用することをお勧めします。

#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 に答える