Системное программирование в UNIX средствами Free Pascal

       

Вызов ехес и открытые файлы


Дескрипторы открытых файлов обычно сохраняют свое состояние также во время вызова ехес, то есть файлы, открытые в исходной программе, остаются открытыми, когда совершенно новая программа запускается при помощи вызова ехес. Указатели чтения-записи на такие файлы остаются неизменными после вызова ехес. (Очевидно, не имеет смысла говорить о сохранении значений переменных после вызова ехес, так как в общем случае новая программа совершенно отличается от старой.)

Тем не менее есть связанный с файловым дескриптором флаг close-on-exec

(закрывать при вызове ехес), который может быть установлен с помощью универсальной процедуры fcntl. Если этот флаг установлен (по умолчанию он сброшен), то файл закрывается при вызове любой функции семейства ехес. Следующий фрагмент показывает, как устанавливается флаг close-on-exec:

uses linux;

.

.

.

var

  fd:longint;

fd := fdopen('file', Open_RDONLY);

.

.

.

(* Установить флаг close-on-exec *)

fcntl(fd, F_SETFD, 1);

Флаг close-on-exec можно сбросить так:

fcntl(fd, F_SETFD, 0);

Значение флага можно получить следующим образом:

res := fcntl(fd, F_GETFD);

Целое res будет иметь значение 1, если флаг close-on-exit установлен для дескриптора файла fd, и 0 – в противном случае.



Содержание раздела