Linux 上にファイルが存在するかどうかを確認する
以下は、Linux システムの特定のパスにファイルが存在するかどうかを判断する簡単な C 言語プログラムです。
#include <stdio.h>
#include <stdlib.h>
int main(void) {
const char *path = "/path/to/file"; // 要检查的文件路径
FILE *fp = fopen(path, "r"); // 尝试打开文件
if (fp != NULL) {
printf("%s 文件存在\n", path);
fclose(fp); // 关闭文件
return EXIT_SUCCESS;
} else {
printf("%s 文件不存在\n", path);
return EXIT_FAILURE;
}
}
プログラムは fopen() 関数を通じて指定されたパスにあるファイルを開こうとします。成功した場合はファイルが存在することを意味し、そうでない場合はファイルが存在しません。ファイルが存在する場合は、ただちにファイル ハンドルを閉じて成功終了コードを返し、ファイルが存在しない場合は直接失敗終了コードを返します。このプログラムでは、コードの可読性と保守性を向上させるために、EXIT_SUCCESS および EXIT_FAILURE マクロ定義が導入されています。
スレッドを使用して、Linux 上にファイルが存在するかどうかを定期的に確認します。
以下は、Linux上で特定のパス配下にファイルが存在するかどうかを定期的に確認するサンプルプログラムです。プログラムはスレッドを使用して定期チェック機能を実現します。
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <unistd.h>
#include <sys/stat.h>
#define FILENAME "/path/to/file" // 要检查的文件路径
#define CHECK_INTERVAL 10 // 检查的时间间隔(秒)
void *check_file(void *arg);
int main()
{
pthread_t tid;
int ret;
// 创建线程
ret = pthread_create(&tid, NULL, check_file, NULL);
if (ret != 0) {
perror("pthread_create error");
exit(1);
}
// 等待线程结束
ret = pthread_join(tid, NULL);
if (ret != 0) {
perror("pthread_join error");
exit(1);
}
return 0;
}
void *check_file(void *arg)
{
struct stat buf;
while (1) {
// 检查文件是否存在
if (stat(FILENAME, &buf) == 0) {
printf("File exists\n");
} else {
printf("File does not exist\n");
}
// 等待一段时间后再进行下一次检查
sleep(CHECK_INTERVAL);
}
return NULL;
}
プログラムはスレッドを作成することで定期チェック機能を実現します。スレッド関数check_fileでは、stat関数を使用して指定されたファイルが存在するかどうかを確認し、ファイルが存在する場合は「ファイルが存在します」を出力し、存在しない場合は「ファイルが存在しません」を出力します。各チェックの後、プログラムは次のチェックを行う前に、指定された間隔 (秒単位) だけスリープします。
プログラムでスレッドを使用する場合は、コンパイル時に pthread ライブラリをリンクする必要があることに注意してください。たとえば、次のようになります。
gcc -o program program.c -lpthread
ここで、-lpthread は pthread ライブラリをリンクすることを意味します。