39
Это отличается от ряда систем, которые способны монтировать файловые системы как на символьных устройствах, так и на блочных.
40
В Linux всегда используется термин
41
Это режим, обычно используемый для каталога /tmp
.
42
readv()
, writev()
и mmap()
обсуждаются в главе 13; sendmsg()
и recvmsg()
упоминаются в главе 17.
43
Хотя такое разделение почти ясно, сокеты TCP поддерживают 'внеполосные' данные, что несколько усложняет ситуацию. Такие данные выходят за пределы тем, рассматриваемых в этой книге. Их полное описание можно найти в [33].
44
Почти независимую; см. описание исключений из этого правила в дискуссии о dup()
в конце этой главы.
45
Поскольку в большинстве систем SEEK_SET
определена как 0, часто можно увидеть использование lseek(fd, offset, 0)
вместо lseek(fd, offset, SEEK_SET)
. Это делает код непереносимым (или плохо читабельным), чем SEEK_SET
, но подобное часто встречается в старом коде.
46
Все же не всегда. Если процессы разделяют файловые дескрипторы (имеются в виду дескрипторы, полученные от одного вызова open()
),эти процессы разделяют одни и те же файловые структуры и одно и тоже текущее положение. Наиболее часто такое случается после вызова fork()
,как обсуждается в конце этой главы. Другая ситуация, когда такое может случиться — это если файловый дескриптор передается другому процессу через доменный сокет Unix, описанный в главе 17.
47
Она так называется потому, что это протоколируемая версия Second Extended File System (второй расширенной файловой системы), которая была наследницей Linux Extended File System, которая, в свою очередь, была спроектирована как более сложная файловая система, чем файловая система Minix — единственная, которую изначально поддерживалась в Linux.
48
В действительности это хорошо работает и на файловой системе ext2. Эти две файловые системы очень похожи (можно даже смонтировать систему ext3 на ext2), и представленные программы работают на обеих. Фактически, если в исходных тексте заменить 3 на 2, программы будут функционировать точно так же.
49
Хотя не гарантировано, что PATH_MAX
будет достаточно велик, но для большинства практических целей она подходит. Если вы имеете дело с патологическими случаями, то должны вызывать readlink()
последовательно, увеличивая буфер, до тех пор, пока readlink()
не вернет значение меньше чем bufsiz
.
50
В зависимости от операционной системы, файловые структуры также известны как позиции в таблице файлов или объекты открытых файлов.
51