1 /* 2 * list.c 3 * 4 * Listet Verzeichnisse auf. 5 * Verwendet Funktionen nach POSIX-Standard. 6 * 7 * Author H.Drachenfels 8 * Erstellt am: 26.4.2024 9 */
10
11 #define _POSIX_C_SOURCE 1
12
13 #include <stdio.h> // fprintf, printf
14 #include <string.h> // strerror
15
16 #include <sys/stat.h> // struct stat, S_ISDIR
17 #include <dirent.h> // DIR, struct dirent, opendir, readdir
18 #include <errno.h> // errno
19
20 int main(int argc, char *argv[])
21 {
22 for (int i = 1; i < argc; ++i)
23 {
24 struct stat s; // Dateistatus
25 if (stat(argv[i], &s) == -1)
26 {
27 fprintf(stderr,
28 "%s existiert nicht (errno %d: %s)\n",
29 argv[i], errno, strerror(errno));
30 continue;
31 }
32
33 if (!S_ISDIR(s.st_mode))
34 {
35 fprintf(stderr, "%s ist kein Verzeichnis\n", argv[i]);
36 continue;
37 }
38
39 DIR *d = opendir(argv[i]); // geoeffnetes Verzeichnis
40 if (d == NULL)
41 {
42 fprintf(stderr,
43 "%s kann nicht geoeffnet werden (errno %d: %s)\n",
44 argv[i], errno, strerror(errno));
45 continue;
46 }
47
48 errno = 0;
49
50 struct dirent *e; // gelesener Verzeichniseintrag
51 while ((e = readdir(d)) != NULL)
52 {
53 printf("%s/%s\n", argv[i], e->d_name);
54 }
55
56 if (errno)
57 {
58 fprintf(stderr,
59 "Lesefehler in %s (errno %d: %s)\n",
60 argv[i], errno, strerror(errno));
61 }
62
63 if (closedir(d) == -1)
64 {
65 fprintf(stderr,
66 "%s kann nicht geschlossen werden (errno %d: %s)\n",
67 argv[i], errno, strerror(errno));
68 continue;
69 }
70 }
71
72 return 0;
73 }
74