C programlamada çok yeniyim. Bir klasördeki tüm dosyalar arasında geçiş yapmak ve bu öznitelikler için her dosyayı yazdırmak için bu programa ihtiyacım var. Bu noktada sadece klasörün niteliklerini yazdırıyor.Bir dosya ve yazdırma dosya özniteliklerini döngü içinde C
#include <sys/types.h>
#include <sys/stat.h>
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <dirent.h>
int main(int argc, char *argv[])
{
DIR *dp;
struct stat file_stats;
if (argc != 2) {
fprintf(stderr, "Usage: fstat FILE...\n");
return EXIT_FAILURE;
}
if ((stat(argv[1], &file_stats)) == -1) {
perror("fstat");
return EXIT_FAILURE;
}
dp = opendir("./");
if (dp == NULL) {
perror("couldn't open directory");
return EXIT_FAILURE;
}
while (readdir(dp)) {
printf("filename: %s\n", argv[1]);
printf(" device: %lld\n",
file_stats.st_dev);
printf(" protection: %o\n",
file_stats.st_mode);
printf(" number of hard links: %d\n",
file_stats.st_nlink);
printf(" user ID of owner: %d\n",
file_stats.st_uid);
printf(" group ID of owner: %d\n",
file_stats.st_gid);
printf(" device type (if inode device): %lld\n",
file_stats.st_rdev);
printf(" total size, in bytes: %ld\n",
file_stats.st_size);
printf(" blocksize for filesystem I/O: %ld\n",
file_stats.st_blksize);
printf(" inode number: %lu\n",
file_stats.st_ino);
printf(" time of last access: %ld : %s",
file_stats.st_atime,
ctime(&file_stats.st_atime));
printf(" time of last change: %ld : %s",
file_stats.st_ctime,
ctime(&file_stats.st_ctime));
closedir(dp);
}
return EXIT_SUCCESS;
}
Ben ise döngüye yapı devam etmeliyiz ama derleyici diyor bunu yaparken "bildirilmemiş file_stats."
onun da '' döngüde closedir() çağırır olduğunu fark ettiniz mi? Dışarıda olmamalı, "0" dan (main) geri dönmeden hemen önce mi? –
Doğru! Ne yazık ki test etmek için bir posix makinem yok, bu yüzden sadece bulduğum ilk hatayı işaret ettim. Aslında 'printf (" dosya adı:% s \ n ", argv [1]);' printf ("filename:% s \ n", ep-> d_name); "ve yerine" dp = opendir ("./"); 'dp = opendir (argv [1]);' modunun mantıklı görünmesini sağlar. –
Kesinlikle haklısınız! Programı (Linux makinemde) değişikliklerinizle kontrol ettim ve şimdi doğru şekilde çalışıyor. Tamamen doğru bir çalışma koduna sahip olmak için cevabımı ekleyeceğim. –