Unix 命令 "ls" 在 C 中



经过很长时间的搜索,我不得不寻求您宝贵的帮助。我正在编写一个在C中实现"ls"unix命令的程序。我只知道文件名和大小。我看起来我必须使用:"stat"one_answers"dirent"。我在Stackoverflow中找到了一个"解决方案",但对我来说并不完美。所以我可以在目录中显示文件的名称,但不能显示它们的大小。当我使用gcc时,它是否显示:0八位字节(当它不为空时)或"

错误:格式"%s"需要类型为"char*"的参数,但参数为3具有类型'__off_t'[-Weror=format=]printf("%s-%s",dp->d_name,s->strongize);

"

我的测试代码(不干净):

#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格式大小修饰符:

printf("%s - %jd", dp->d_name, (intmax_t)s->st_size);

您需要确保为intmax_t提供适当的标题:

#include <stdint.h>

相关内容

  • 没有找到相关文章

最新更新