nullnullhow to read directory name using std c in the linux
在改章节中,我们主要介绍nullnull的内容,自我感觉有个不错的建议和大家分享下
#include <sys/types.h> #include <dirent.h> #include <stdio.h> #include <unistd.h> #include <getopt.h> #define err_quit printf #define err_sys printf #define TRUE 1 #define FALSE 0 #define EXIT_FAILE 0 #define EXIT_SUCESS 1 #define bool char static char g_cur_dir[256] = ""; int read_directory(char *dir_name, bool brecurse); void usage(char state, char *str); int main(int argc, char **argv) { int c; char recurse = 0; struct option long_option[]= { {"dirname", no_argument, NULL, 0 }, {"recurse", optional_argument, NULL, 'r'}, {"help", no_argument, NULL, 'h'}, {0, 0, 0, 0 }, }; //read current directory. //if no any params, read current dir files. if(argc < 2) { read_directory("./", TRUE); return ; } //read command line params. while((c = getopt_long(argc, argv, "hr::", long_option, NULL)) != EOF) //while((c = getopt(argc, argv, ":hr::")) != EOF) { switch(c) { case 'r': recurse = 1; break; case 'h': usage(EXIT_SUCESS, argv[0]); break; default: usage(EXIT_FAILE, argv[0]); break; } } if (recurse && (optind == argc)) { read_directory("./", TRUE); exit(0); } //read all files from argv[optind]. for(; optind < argc; ++optind) { read_directory(argv[optind], recurse); } exit(0); } int read_directory(char *dir_name, bool brecurse) { DIR *dp; struct dirent *dir; strcpy(g_cur_dir, dir_name); if (g_cur_dir[strlen(g_cur_dir) -1] == '/') g_cur_dir[strlen(g_cur_dir) -1] = 0; if ((dp = opendir(dir_name)) == NULL) { err_sys("can't open %s. \n", dir_name); return ; } while( (dir = readdir(dp)) != NULL) { if ( brecurse && (DT_DIR == dir->d_type) && (strcmp(dir->d_name, ".") != 0) && (strcmp(dir->d_name, "..") != 0) ) { printf("%s/", g_cur_dir); printf("%s\n", dir->d_name); strcat(g_cur_dir, "/"); strcat(g_cur_dir, dir->d_name); read_directory(g_cur_dir, brecurse); g_cur_dir[strlen(g_cur_dir) - strlen(dir->d_name) - 1] = 0; } else { printf("%s/", g_cur_dir); printf("%s\n", dir->d_name); } } closedir(dp); } void usage(char state, char *str) { if (state == EXIT_FAILE) { printf("\n"); } else { printf("\n"); printf("========================================\n"); printf("read directory:\n"); printf("\n"); printf("Usage: %s [-r] [directory]\n\n", str); printf(" -r: read all files under each directory, recursively. \n"); printf("========================================\n"); printf("/n"); exit(0); } }
文章结束给大家分享下程序员的一些笑话语录:
看新闻说中国输入法全球第一!领先了又如何?西方文字根本不需要输入法。一点可比性都没有。