안녕하세요 저는 'q'를 입력하지 않으면 폴더를 스캔하는 프로그램을 작성해야하며 새 파일이 발견되면 인쇄합니다. 난 이미 내 마지막 연습을 위해 이것을 썼는데 괜찮 았어 (단순히 폴더의 모든 파일을 스캔하고 인쇄하는 것)하지만이 문제를 어떻게 다룰 지 모릅니다.c 새 파일을 검색하는 폴더
DIR *dp;
struct dirent *ep;
dp = opendir (directory);
if (dp != NULL)
{
while (ep = readdir (dp))
{
puts (ep->d_name);
}
(void) closedir (dp);
}
else
perror ("Couldn't open the directory"); return 1;
편집 :
pthread_mutex_t mojmuteks=PTHREAD_MUTEX_INITIALIZER;
void *change(char *status)
{
int x=1;
while(x==1)
{
pthread_mutex_lock(&mojmuteks);
*status=getchar();
pthread_mutex_unlock(&mojmuteks);
}
}
main(int argc, char *argv[])
{
DIR *dp;
struct dirent *ep;
struct stat file_stat;
time_t last=0;
char status='n';
pthread_t mojwatek;
if (pthread_create(&mojwatek, NULL, change, &status))
{
printf("błąd przy tworzeniu wątku.");
abort();
}
pthread_mutex_lock(&mojmuteks);
while(status!='q')
{
pthread_mutex_unlock(&mojmuteks);
dp = opendir (argv[1]);
last=file_stat.st_ctime;
if (dp != NULL)
{
while (ep = readdir (dp))
{
stat(ep->d_name, &file_stat);
if(last>file_stat.st_ctime)
last=file_stat.st_ctime;
}
}
else
{
perror ("Couldn't open the directory");
return 1;
}
(void) closedir (dp);
dp = opendir (argv[1]);
if (dp != NULL)
{
while (ep = readdir (dp))
{
stat(ep->d_name, &file_stat);
if(last<file_stat.st_ctime)
puts (ep->d_name);
}
}
else
{
perror ("Couldn't open the directory");
return 1;
}
closedir(dp);
pthread_mutex_lock(&mojmuteks);
}
return 0;
}
2 개 질문을했다 : 뮤텍스를 사용하여가, 각 경로 후 "메인"과정 "에서 응답을 기다리고 난 이미이 그래서
확인 변경 "을 실행하는 대신"q "를 입력하지 않으면 문제를 해결할 수 있습니까? 두 번째 질문 : st_ctime을 사용하여 어떤 파일이 더 오래된 지 확인하고 있지만 일부 파일에는이 변수에 항상 0 값이 있습니다. 왜 그리고 어떻게 수정해야합니까?
을 사용해야합니다. 파일 이름을 인쇄하려면 사용자에게 확인 메시지를 보내야합니까 ??? –
이 문제가 _ 이상합니다. 문제가 무엇인지 설명하지 못했습니까? – Matt
아니요, 모든 확인이 필요하지 않습니다. 사용자가 Finnish 스캔을 원하면 'q'를 누를 수 있습니다. – MrKaszu