Может ли размер файла быть отрицательным числом?Зачем? - PullRequest
2 голосов
/ 27 июля 2011

На /coreutils-8.12/src/ls.c, я нашел этот комментарий:

/* POSIX requires that a file size be printed without a sign, even
when negative.  Assume the typical case where negative sizes are
actually positive values that have wrapped around.  */

в строке 2639.

Мои вопросы: - К какому типичному случаю они относятся? - Может ли размер файла быть отрицательным числом, за исключением проблем с переполнением больших файлов и старых систем? - Если да, то почему? (И почему меня должно волновать то, что они делают в приведенном выше комментарии?)

Меня интересуют и другие системы, не только POSIX

Ответы [ 2 ]

3 голосов
/ 27 июля 2011

Это может означать, что размеры файлов в POSIX должны рассматриваться как целые числа без знака, а не как со знаком. Размер файла> 2 ГБ, если он представлен в виде 32-разрядного целого числа, может показаться отрицательным, хотя, очевидно, это не так.

1 голос
/ 27 июля 2011

Посмотрите на код под комментарием:

static uintmax_t
unsigned_file_size (off_t size)
{
  return size + (size < 0) * ((uintmax_t) OFF_T_MAX - OFF_T_MIN + 1);
}

Если size отрицательно, оно будет заменено на положительное число путем добавления некоторого определенного значения (скорее всего, что-то около 2 ^ 31 для 32Типы битовых данных и т.1008 *

...