After a long time to search a solution, I have to ask your precious help. I work on a program which implement "ls" unix command in C. I'd have only name of the file and his size. I looked that I've to use: "stat" and "dirent". I found a "solution" in Stackoverflow but didn't work perfectly for me. So I can show the names of the file into the directory but not their size. When I use gcc, whether it shows: 0 octet (while it isn't empty) or "
error: format ‘%s’ expects argument of type ‘char *’, but argument 3 has type ‘__off_t’ [-Werror=format=] printf("%s - %s", dp->d_name, s->st_size);
"
My test code (not clean):
#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);
}
}
In fact, I don't know how to solve the format type problem. I saw I could use ftell/fseek but I don't have the right to use FILE* functions.
Thank you for all solutions :)
int size = s->st_size; and printf("%s - %d", dp->dp_name, size);It shows false informations about filess->st_sizeis normally not an int, so your value might be truncated when you didint size = s->st_size;if the file size is large. There are answers and pointers to similar question (like stackoverflow.com/questions/1401526/…) that shows you how to print out anoff_ttype.