Поскольку в вашей программе есть незначительные ошибки, я приложил небольшое усилие, чтобы написать простую рабочую версию:
#include <sys/types.h>
#include <sys/stat.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <stdio.h>
#define BUF 20
int main(int argc, char **argv)
{
struct stat fileStat;
char buf[BUF];
int err;
err = stat( argv[1], &fileStat ); // No argv sanity checks
if (0 != err)
return EXIT_FAILURE;
memset(buf, 0, BUF);
snprintf(buf, BUF, "%d\n", fileStat.st_size);
write(0, buf, BUF);
}
Некоторые дальнейшие комментарии:
main(int argc, char** argv)
- это способ получения параметров.argv[1]
содержит первый аргумент, если указан argv[0]
- имя программы.См. здесь . - Не возвращайте размер из main, поскольку он зарезервирован для возврата кодов ошибок.Кроме того,
return 0
означает успех в UNIX / Linux.Используя write
, вы также можете передать результат для дальнейшей обработки.
Чтобы прочитать собственный размер программы (в соответствии с запросом OP), просто скомпилируйте (gcc -o prog stat.c
) и запустите (./prog prog
). * * тысяча двадцать-один