Программа, которая читает свой собственный размер из st_size - PullRequest
0 голосов
/ 22 мая 2018

Используя функцию 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 Ответ

0 голосов
/ 22 мая 2018

Поскольку в вашей программе есть незначительные ошибки, я приложил небольшое усилие, чтобы написать простую рабочую версию:

#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). * * тысяча двадцать-один

...