Когда я пытаюсь распечатать вывод файла устройства, вы увидите двоичные данные в шестнадцатеричном формате. Но после выполнения ls -l /dev/sda я получаю:
brw-rw---- 1 root disk 8, 0 Jan 29 12:29 /dev/sda
Я не понимаю, каков фактический размер файла? Что означают эти цифры?
Я не могу найти документацию о том, почему ls показывает их вместо простой 0, например du или stat, но, как говорит байт-коммандер, они являются основными и младшими номерами устройств этого специальный файл. Из источника:
if (f->stat_ok
&& (S_ISCHR (f->stat.st_mode) || S_ISBLK (f->stat.st_mode)))
{
char majorbuf[INT_BUFSIZE_BOUND (uintmax_t)];
char minorbuf[INT_BUFSIZE_BOUND (uintmax_t)];
int blanks_width = (file_size_width
- (major_device_number_width + 2
+ minor_device_number_width));
sprintf (p, "%*s, %*s ",
major_device_number_width + MAX (0, blanks_width),
umaxtostr (major (f->stat.st_rdev), majorbuf),
minor_device_number_width,
umaxtostr (minor (f->stat.st_rdev), minorbuf));
p += file_size_width + 1;
}
Этот код, часть основных и младших номеров устройств , используется, когда выходной формат длинный (который находится с -l), использует номера устройств вместо размера для символьного и блочного устройств.
Чтобы получить фактический размер устройства, в этом Unix & amp; Сообщение Linux.
Кажется, вы пропустили концепцию «все-есть-файл».
В мире UNIX все (данные, устройства, сокеты, ...) сопоставляется с файлом.
В отличие от этих обычных файлов каталог / dev-directory (в случае вашего домашнего каталога) т. е. подразумевается именем - файлами устройства. Поэтому вы найдете файлы типов символов, блоков и труб, представляющих устройства, например. / dev / mem - это файл, представляющий вашу системную память, / dev / ttyACM0 может быть серийным модемом. Связь между этими (device-) файлами и ответственными драйверами создается с использованием основных и второстепенных номеров, как показано в файле ls (и как описано выше).
Размер устройства - это атрибут, специфичный для устройства, и его необходимо запросить с помощью специальных инструментов устройства (как показано в приведенном выше сообщении), потому что нет уникального способа борьбы с этим атрибутом (SSD может иметь фиксированный размер - но последовательный порт может доставлять бесконечный поток данных, поэтому нет фиксированного размера, / dev / null имеет бесконечное хранилище:)).
Вы можете прочитать здесь: https: // en .wikipedia.org / вики / Everything_is_a_file