C言語でfindコマンドを書きたい

■要求定義
– ファイルの検索をする

■検討
– ファイルがあった時
-> ファイル名をそのまま返す
$ ls
dev hello.c
$ find hello.c
hello.c

– ファイルが無かった時
-> エラーメッセージを表示する
$ find test.dat
find: ‘test.dat’: No such file or directory

– fopenとstat(非標準)を使う方法がある

fopenで存在確認

int main(){

	FILE *fp = "hoge.c";
	if(fopen(fp, "r") == NULL) {
		printf("'%s': No such file or directory\n", fp);
	} else {
		printf("%s\n", fp);
	}

	return 0;
}

$ ./dev
‘hogehoge.c’: No such file or directory

メッセージをlinuxに合わせると雰囲気を出せる。

#include <stdio.h>
#include <sys/stat.h> // ファイル・ディレクトリに関する情報取得


int main(){

	struct stat st; 
	FILE *fp = "hogehoge.c";
	if(stat(fp, &st) != 0) {
		printf("'%s': No such file or directory\n", fp);
	} else {
		printf("%s\n", fp);
	}

	return 0;
}

$ ./dev
‘hogehoge.c’: No such file or directory

成功すると 0 を、エラー発生時には -1を返す。
非標準なので、statよりもfopenか。

返り値が0 | 1 ってのが、2進数を扱っている実感ができて良い。