Макет панели инструментов изменен в зависимости от пункта меню

На основе кода NilObject:

#include 
#include 

off_t fsize(const char *filename) {
    struct stat st; 

    if (stat(filename, &st) == 0)
        return st.st_size;

    return -1; 
}

Изменения:

  • Сделал аргумент имени файла a const char.
  • Исправлено struct stat, в котором отсутствовало имя переменной.
  • Возвращает -1 при ошибке вместо 0, что было бы неоднозначным для пустого файла. off_t является подписанным типом, поэтому это возможно.

Если вы хотите fsize() распечатать сообщение об ошибке, вы можете использовать это:

#include 
#include 
#include 
#include 
#include 

off_t fsize(const char *filename) {
    struct stat st;

    if (stat(filename, &st) == 0)
        return st.st_size;

    fprintf(stderr, "Cannot determine size of %s: %s\n",
            filename, strerror(errno));

    return -1;
}

В 32-битных системах вы должны скомпилировать это с помощью опции -D_FILE_OFFSET_BITS=64, иначе off_t будет содержать только значения до 2 ГБ. Подробнее см. Раздел «Использование LFS» в Поддержка больших файлов в Linux .

0
задан AvisSiva 18 March 2019 в 16:40
поделиться