
码:
#include <sys/types.h>#include <sys/stat.h>#include <unistd.h>#include <stdio.h>#include <stdlib.h>#include <dirent.h>int main(int argc,char* argv[]){ DIR *mydir; struct dirent *myfile; struct stat mystat; mydir = opendir(argv[1]); while((myfile = readdir(mydir)) != NulL) { stat(myfile->d_name,&mystat); printf("%d",mystat.st_size); printf(" %s\n",myfile->d_name); } closedir(mydir);} 这些是执行代码后的结果:
[root@localhost ~]# ./a.out Downloads4096 ..4096 hw22.c4096 ankur.txt4096 .4096 destination.txt
以下是正确的尺寸:
[root@localhost ~]# ls -al Downloadstotal 20drwxr-xr-x. 2 root root 4096 Nov 26 01:35 .dr-xr-x---. 24 root root 4096 Nov 26 01:29 ..-rw-r--r--. 1 root root 27 Nov 21 06:32 ankur.txt-rw-r--r--. 1 root root 38 Nov 21 06:50 destination.txt-rw-r--r--. 1 root root 1139 Nov 25 23:38 hw22.c
任何人都可以指出我的错误.
谢谢,
ANKUR
解决方法 myfile-> d_name是不是路径的文件名,因此您需要先将文件名附加到目录“Downloads / file.txt”,如果它不是工作目录:char buf[512]; while((myfile = readdir(mydir)) != NulL){ sprintf(buf,"%s/%s",argv[1],myfile->d_name); stat(buf,&mystat);.... 至于为什么打印4096是链接的大小.和..从最后一次调用到stat().
注意:您应该分配足够大的缓冲区来保存目录名称,文件名称为NulL字节和分隔符,类似于此
strlen(argv[1]) + name_MAX + 2;总结
以上是内存溢出为你收集整理的在C中实现ls -al命令全部内容,希望文章能够帮你解决在C中实现ls -al命令所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)