how to read directory name using std c in the linux
2013-05-20 15:50
211 查看
#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); } }
相关文章推荐
- nullnullhow to read directory name using std c in the linux
- How to read the Linux system name?
- How to mount a remote directory in Linux using sshfs
- How to read and save Images in a Sql Server Database using ADO.NET and C#
- How to Modify the web.config file in SharePoint using SPWebConfigModification?
- 继续摘抄:How to fix Apache – “Could not reliably determine the server’s fully qualified domain name, using 127.0.1.1 for ServerName”
- How to avoid uppercase function name while using Function in latex?
- How to change the name of logfile dynamically using log4j
- How to solve: when using tab in gnomeTerminal , the entire screen flash,
- How to collect the full path name of the files in ASM diskgroups (文档 ID 888943.1)
- How to create Oracle ASM devices using device-mapper multipath devices in Red Hat Enterprise Linux 6
- how the process using the hard disk in linux
- How to read Mac .DMG file in Linux or PC(II)
- How to import a C library in Swift using the Swift Package Manager
- How to change the name in open with list / File association.
- [Tutor] how to change the current working directory path in ipython.
- How to view the schema class or attribute definition you first have to install the Active Directory Schema snap-in
- how to config the tftpd-hpa server in the ubuntu using for remote tftp client '-p' and '-r' command
- How to get the handle in windows using python
- What is EPOLL? Epoll vs Poll vs Select call ? And How to implement UDP server in Linux using EPOLL?