当前位置:  技术问答>linux和unix

跪求各路英雄好汉帮帮我这个菜鸟吧 linux c 关于文件夹问题

    来源: 互联网  发布时间:2017-01-16

    本文导语:  脚本如下: #!/bin/bash #1.sh echo 请输入一个目录路径: read var1 echo 请输入生成的文件名称: read var2 ls -Rl $var1 > $var2 脚本运行结果如下: /home/zhangzw: 总用量 20 -rw-r--r-- 1 zhangzw users  188  9月  1 02:50 2.txt -rwxr-...

脚本如下:

#!/bin/bash
#1.sh
echo 请输入一个目录路径:
read var1
echo 请输入生成的文件名称:
read var2
ls -Rl $var1 > $var2

脚本运行结果如下:
/home/zhangzw:
总用量 20
-rw-r--r-- 1 zhangzw users  188  9月  1 02:50 2.txt
-rwxr-xr-x 1 zhangzw users   57  8月 31 06:29 me.txt

/home/zhangzw/zzw:
总用量 64
-rw-r--r-- 1 zhangzw users 1053  8月 31 08:50 1.txt
-rwxrwxrwx 1 zhangzw users   61  8月 31 06:11 zzw.c

/home/zhangzw/zzw2:
总用量 80
-rw-r--r-- 1 zhangzw users  582 11月 17 15:52 11.c
-rw-r--r-- 1 zhangzw users  257 11月 17 17:39 12.c

我有一个shell脚本如上 基本功能是把输入的目录路径下的所有文件(也包括子目录)的详细文件名保存到一个文件里(或数组里)
该如何用c语言实现上边的功能呢 具体一点 我刚开始接触linux c

有人告诉我用opendir()/readdir()/closedir()不太会用呀 

|
             #include 
              #include 
              #include 
              #include 
              #include 
              #include 
              #include 
              #include 
              #include 
              #include 


              struct dirent  *dp;
              struct stat     statbuf;
              struct passwd  *pwd;
              struct group   *grp;
              struct tm      *tm;
              char            datestring[256];
              ...
              /* Loop through directory entries. */
              while ((dp = readdir(dir)) != NULL) {


                  /* Get entry's information. */
                  if (stat(dp->d_name, &statbuf) == -1)
                      continue;


                  /* Print out type, permissions, and number of links. */
              struct group   *grp;
              struct tm      *tm;
              struct tm      *tm;
              char            datestring[256];
              ...
              /* Loop through directory entries. */
              while ((dp = readdir(dir)) != NULL) {


                  /* Get entry's information. */
                  if (stat(dp->d_name, &statbuf) == -1)
                      continue;


                  /* Print out type, permissions, and number of links. */
                  printf("%10.10s", sperm (statbuf.st_mode));
                  printf("%4d", statbuf.st_nlink);


                  /* Print out owner's name if it is found using getpwuid(). */
                  if ((pwd = getpwuid(statbuf.st_uid)) != NULL)
                      printf(" %-8.8s", pwd->pw_name);
                  else
                      printf(" %-8d", statbuf.st_uid);


                  /* Print out group name if it is found using getgrgid(). */
                  if ((grp = getgrgid(statbuf.st_gid)) != NULL)
                      printf(" %-8.8s", grp->gr_name);
                  else
                      printf(" %-8d", statbuf.st_gid);


                  /* Print size of file. */
                  printf(" %9jd", (intmax_t)statbuf.st_size);


                  tm = localtime(&statbuf.st_mtime);


                  /* Get localized date string. */
                  strftime(datestring, sizeof(datestring), nl_langinfo(D_T_FMT), tm);


                  printf(" %s %sn", datestring, dp->d_name);
              }
 

你很幸运,man stat里恰好有一个。

|
先利用operdir打开目录,然后readdir读取目录里的内容,也就是各个文件的信息。利用文件名得到该文件名的相关信息,然后存放到另外一个文件里即可。源代码是楼上说的:

|
使用readdir你可能需要递归

考虑使用scandir()

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3