[英]Unix command “ls” in C
经过很长时间寻找解决方案之后,我不得不寻求您的宝贵帮助。 我正在研究在C中实现“ ls” unix命令的程序。我只有文件名及其大小。 我看起来必须使用:“ stat”和“ dirent”。 我在Stackoverflow中找到了一个“解决方案”,但对我来说并不完美。 因此,我可以在目录中显示文件名,但不能显示文件名。 当我使用gcc时,它是否显示:0个八位位组(不为空)或“
错误:格式为'%s'的参数应为'char *'类型,但参数3的类型为'__off_t'[-Werror = format =] printf(“%s-%s”,dp-> d_name,s-> st_size );
“
我的测试代码(不干净):
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <dirent.h>
#include <fcntl.h>
#include <errno.h>
#include <poll.h>
struct stat statbuf;
struct dirent *dp;
struct stat *s;
int main ()
{
DIR *dirp;
dirp = opendir("/tmp/gestrep");
while((dp = readdir(dirp)) !=NULL)
{
stat(dp->d_name, &statbuf);
printf("%s - %s", dp->d_name, s->st_size);
}
}
实际上,我不知道如何解决格式类型问题。 我看到我可以使用ftell / fseek,但是我没有使用FILE *函数的权利。
谢谢您的所有解决方案:)
您当然不能使用%s
格式代码输出任何整数类型的值,并且从gcc收到的错误消息应该很清楚。
Posix要求off_t
是某些整数类型的别名,因此一个简单的解决方案(使用C11)将值转换为intmax_t
(这是最宽的整数类型),然后使用j
printf format size修饰符:
printf("%s - %jd", dp->d_name, (intmax_t)s->st_size);
您需要确保包含适当的标头,以使intmax_t
可用:
#include <stdint.h>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.