Файловая система Andrew Filesystem (AFS), доступная в Linux, но не включенная в стандартное ядро, поддерживает O_EXCL
во всей сети.
Эта ситуация более сложна для потоков. Многие ядра и библиотеки Linux рассматривают потоки как разные процессы, что увеличивает потенциал возникновения конфликтов файловых блокировок между потоками (а это не совместимо со стандартной моделью потоков POSIX). Linux предлагает более традиционную модель потоков, при которой файловые блокировки разделяются между всеми потоками одного процесса, но в многопоточных программах лучше применять потоковые механизмы блокировки POSIX, а не полагаться на поведение файловых блокировок.
Эта манипуляция блокировками происходит атомарно — не имеет значения, какая часть области разблокирована.
Эффект, производимый вызовами fork()
и exec()
на файловые блокировки, является наиболее существенным отличием между файловой блокировкой POSIX (а, следовательно, и блокировкой lockf()
) и файловой блокировкой flock()
в BSD.
Одним из самых частых пользователей аренды файлов является файловый сервер Samba, позволяющий клиентам кэшировать свои записи для увеличения производительности.
Если тот факт, что аренда записи уведомляет процесс об открытии файла для чтения, может показаться несколько странным, посмотрите на него с точки зрения процесса, получающего аренду. Ему необходимо знать, делает ли другой процесс читать файл, только в случае, когда основной процесс сам что-либо записывает в этот файл.
Ядра предшествующих версий при успешной операции возвращает ноль либо единицу, тогда как более новые ядра всегда возвращают в данном случае ноль. В другом случае проверка на положительное или отрицательное значение работает нормально.
Если один сигнал используется для аренды множества файлов, убедитесь, что сигнал является сигналом реального времени, так что множество событий аренды ставятся в очередь. Если используется обычный сигнал, он может потеряться либо события аренды могут возникать через очень короткие промежутки времени.
До тех пор пока O_NONBLOCK
не будет определен как флаг open()
; в этом случае возвращается EWOULDBLOCK
.
Они так именуются, поскольку чтение разбрасывает данные по всей памяти, а запись собирает данные из разных областей памяти. Они также известны как векторное чтение и запись. Этим объясняется наличие "v" в конце readv()
и writev()
.
Эта эмулированная версия в большинстве случаев ведет себя корректно, но действует не так, как фактический системный вызов, если сигналы принимаются во время его выполнения.
Это верно; PATH_MAX
не является фактическим пределом. POSIX считает его неопределенным , что обычно является эквивалентом "не используйте его".
Имя этого пути эквивалентно более простому /usr/bin/less
.
Функции ftw()
необходимо выполнять stat()
для каждого файла для выяснения, является ли он каталогом, и передача этой информации обратному вызову во многих случаях избавляет последний от необходимости повторного выполнения stat()
для файлов.
Это то же, что и метод, используемый для владения файлами (глава 13).
Обработчик сигналов все еще следует регистрировать с помощью флага SA_SIGINFO
, чтобы файловый дескриптор надлежащим образом получил доступ к сигналу.
Остановленные процессы, однако, не могут генерировать сигналы, поэтому они также не могут перезапускаться.
Обычно клавиатурной комбинацией приостановки является . Программа stty позволяет пользователям менять эту комбинацию. Подробнее это рассматривается в главе 16.
То есть устройства, используемые как для ввода, так и для вывода.
Реализации Unix старого типа предоставляли эту функцию с помощью TIOCSPGRP ioctl()
, до сих пор поддерживаемого Linux. Для сравнения, tcsetpgrp()
можно реализовать как ioctl(ttyfd, TIOCSPGRP, &pgrp)
.
Более подробно о сигналах и их взаимодействии с управлением заданиями рассказывается в главе 12.
На man-странице setserial
описан способ обхода этого ограничения, специфический для Linux.
Читать дальше