标签:
1 // 1.3ListAllTheFilesInADirectory.cpp 2 #include <dirent.h> 3 4 #include "../apuesunyj.h" 5 6 int main(int argc, char *argv[]) 7 { 8 DIR *dp; 9 struct dirent *dirp; 10 if (argc != 2) 11 { 12 err_quit("usage: ls directory_name"); 13 } 14 if ((dp = opendir(argv[1])) == NULL) 15 { 16 err_sys("can’t open %s", argv[1]); 17 } 18 while ((dirp = readdir(dp)) != NULL) 19 { 20 printf("%s\n", dirp->d_name); 21 } 22 closedir(dp); 23 return 0; 24 }
1 // error.cpp 2 #include "apuesunyj.h" 3 4 int64_t const MAXLINE = 4096; // max line length 5 /* 6 * * Print a message and return to caller. 7 * * Caller specifies "errnoflag". 8 * */ 9 static void err_doit(int errnoflag, int error, const char *fmt, va_list ap) 10 { 11 char buf[MAXLINE]; 12 13 vsnprintf(buf, MAXLINE, fmt, ap); 14 if (errnoflag) 15 snprintf(buf + strlen(buf), MAXLINE - strlen(buf), ": %s", strerror( 16 error)); 17 strcat(buf, "\n"); 18 fflush(stdout);/* in case stdout and stderr are the same */ 19 fputs(buf, stderr); 20 fflush(NULL);/* flushes all stdio output streams */ 21 } 22 23 /* 24 * * Fatal error unrelated to a system call. 25 * * Print a message and terminate. 26 * */ 27 void err_quit(const char *fmt, ...) 28 { 29 va_list ap; 30 31 va_start(ap, fmt); 32 err_doit(0, 0, fmt, ap); 33 va_end(ap); 34 exit(1) ; // process terminate, not just like return, totally different 35 } 36 37 /* 38 * * Fatal error related to a system call. 39 * * Print a message and terminate. 40 * */ 41 void err_sys(const char *fmt, ...) 42 { 43 va_list ap; 44 45 va_start(ap, fmt); 46 err_doit(1, errno, fmt, ap); 47 va_end(ap); 48 exit(1) ; 49 }
1 // apuesunyj.h 2 #ifndef APUE_SUNYJ 3 #define APUE_SUNYJ 4 5 #include <errno.h> 6 #include <stdio.h> 7 #include <string.h> 8 #include <stdarg.h> 9 #include <stdlib.h> 10 #include <stdint.h> 11 #include <unistd.h> 12 13 void err_quit(const char *fmt, ...); 14 void err_sys(const char *fmt, ...); 15 16 17 #endif
APUE_1.3ListAllTheFilesInADirectory
标签:
原文地址:http://www.cnblogs.com/sunyongjie1984/p/4284728.html