免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1664 | 回复: 5
打印 上一主题 下一主题

自己写的ls-l命令总是有问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-05-13 15:40 |只看该作者 |倒序浏览
如题,源码如下:
#include "stdio.h"
#include <sys/types.h>
#include <sys/stat.h>
#include <dirent.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
int main()
{
        DIR *dir;
        struct dirent *ptr;
        struct stat buffer;
        int i;
        char gid_num[20];
        char uid_num[20];
        char str[1];
        char buf[80];
        getcwd(buf,sizeof(buf));
        stat(buf,&buffer);
        dir=opendir(buf);
      while((ptr=readdir(dir))!=NULL)
        {
                if(strcmp(ptr->d_name,"A")>=0)
                {
                switch (buffer.st_mode & S_IFMT) {
           case S_IFBLK:  printf("block device");            break;
           case S_IFCHR:  printf("character device");        break;
            case S_IFDIR:  printf("directory");               break;
           case S_IFIFO:  printf("FIFO/pipe");               break;
           case S_IFLNK:  printf("symlink");                 break;
           case S_IFREG:  printf("regular file");            break;
           case S_IFSOCK: printf("socket");                  break;
           default:       printf("unknown?");                break;
           }
                printf("%s",str);
                printf(" %d",buffer.st_ino);
                printf(" %d",buffer.st_uid);
                printf(" %d",buffer.st_gid);
                printf(" %d",buffer.st_size);
                printf(" %s",ctime(&buffer.st_mtime));
                printf(" %s\n",ptr->d_name);
                }
        }
        closedir(dir);
        return 0;
}
显示结果如下:
directory 2014013 500 500 4096 Thu May 10 19:35:14 2012
ls1.c
directory 2014013 500 500 4096 Thu May 10 19:35:14 2012
ls1
directory 2014013 500 500 4096 Thu May 10 19:35:14 2012
ls3
directory 2014013 500 500 4096 Thu May 10 19:35:14 2012
ls2
directory 2014013 500 500 4096 Thu May 10 19:35:14 2012
ls2.c
directory 2014013 500 500 4096 Thu May 10 19:35:14 2012
ls3.c
directory 2014013 500 500 4096 Thu May 10 19:35:14 2012
Desktop
为什么总是显示directory呢?怎么能把gid与uid变成字符串呢比如是root形式?

论坛徽章:
0
2 [报告]
发表于 2012-05-13 17:03 |只看该作者
根据gid和uid转换为字符串呗。

论坛徽章:
2
CU十二周年纪念徽章
日期:2013-10-24 15:41:34处女座
日期:2013-12-27 22:22:41
3 [报告]
发表于 2012-05-13 17:40 |只看该作者
str是干嘛的?

循环里面是想引用dirent不是stat吧。除了name以外,打印出的其它东西都是当前目录的属性。

论坛徽章:
0
4 [报告]
发表于 2012-05-13 20:39 |只看该作者
str是之前用的,我知道是文件属性,你看那个文件大小都是一样的,还有全部显示的是directory,这两个都不对,肯定不可能大小都一样的,也不可能所有文件都是目录文件吧,是不是循环哪有问题呢

论坛徽章:
0
5 [报告]
发表于 2012-05-14 17:58 |只看该作者
回复 1# 芝锐514
看你的while循环,你只是对文件夹进行了类型判别,你需要对文件夹下每个文件进行判别,readdir能使你获得每个文件的名字,你调用stat对每个文件进行处理,就可以正确判断类型;

gid,uid转化成对应的字符串,你可以参考user database 和group database,类似getpwent(),getgrent()函数,查找
   

论坛徽章:
0
6 [报告]
发表于 2012-05-17 23:01 |只看该作者
已经解决了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP