diff options
author | Tobias Klauser <tklauser@distanz.ch> | 2008-01-27 11:37:44 +0100 |
---|---|---|
committer | Tobias Klauser <tklauser@xenon.tklauser.home> | 2008-01-27 11:37:44 +0100 |
commit | 7e0f021a9aec35fd8e6725e87e3313b101d26f5e (patch) | |
tree | b1cacc4b24393f517aeb4610e9e1021f954307a8 /reference/C/CONTRIB/OR_USING_C/04.1.c |
Initial import (2.0.2-6)2.0.2-6
Diffstat (limited to 'reference/C/CONTRIB/OR_USING_C/04.1.c')
-rw-r--r-- | reference/C/CONTRIB/OR_USING_C/04.1.c | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/reference/C/CONTRIB/OR_USING_C/04.1.c b/reference/C/CONTRIB/OR_USING_C/04.1.c new file mode 100644 index 0000000..bd0db3d --- /dev/null +++ b/reference/C/CONTRIB/OR_USING_C/04.1.c @@ -0,0 +1,44 @@ +/* + * Non-BSD systems only. + */ +#include <sys/types.h> +#include <sys/dir.h> +#include <stdio.h> + +main() +{ + FILE *fp; + struct direct dir; + int n; + + if ((fp = fopen(".", "r")) == NULL) { + perror("current directory"); + exit(1); + } + + /* + * Read directory entries. Since we're reading + * entries one at a time, we use the fread routine, + * which buffers them internally. Don't use the + * low-level read to do things this way, since + * reading very small quantities of data (16 bytes) + * at a time is very inefficient. + */ + while ((n = fread(&dir, sizeof(dir), 1, fp)) > 0) { + /* + * Skip removed files. + */ + if (dir.d_ino == 0) + continue; + + /* + * Make sure we print no more than DIRSIZ + * characters. + */ + printf("%.*s\n", DIRSIZ, dir.d_name); + } + + fclose(fp); + exit(0); +} + |