Программа, которая читает свой собственный размер из st_size
Используя функцию stat() и аргументы основной функции, я должен написать программу, которая читает и печатает свой собственный размер из st_size. Что я уже пробовал:
#include <sys/types.h>
#include <sys/stat.h>
int main( const char * szFileName )
{
struct stat fileStat;
int err = stat( szFileName, &fileStat );
if (0 != err) return 0;
return fileStat.st_size;
}
Но я не совсем понимаю, как отредактировать его, чтобы прочитать его собственный размер.
Спасибо за ваше время и помощь
1 ответ
Решение
Поскольку в вашей программе есть незначительные ошибки, я приложил небольшое усилие, чтобы написать простую рабочую версию:
#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
).