Книга: Программирование для Linux. Профессиональный подход

Листинг 7.6. (open-and-spin.c) Открытие файла для чтения

Листинг 7.6. (open-and-spin.c) Открытие файла для чтения

#include <fcntl.h>
#include <stdio.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
int main(int argc, char* argv[]) {
 const char* const filename = argv[1];
 int fd = open(filename, O_RDONLY);
 printf("in process %d, file descriptor %d is open to %sn",
  (int)getpid(), (int)fd, filename);
 while (1);
 return 0;
}

Запустите программу в терминальном окне:

% ./open-and-spin /etc/fstab
in process 2570, file descriptor 3 is open to /etc/fstab

Теперь откройте другое окно и проверьте подкаталог fd процесса с указанным номером:

% ls -l /proc/2570/fd
total 0
lrwx------ 1 samuel samuel 64 Jan 30 01:30 0 -> /dev/pts/2
lrwx------ 1 samuel samuel 64 Jan 30 01:30 1 -> /dev/pts/2
lrwx------ 1 samuel samuel 64 Jan 30 01:30 2 -> /dev/pts/2
lr-x------ 1 samuel samuel 64 Jan 30 01:30 3 -> /etc/fstab

Как видите, появилась, ссылка 3, которая соответствует дескриптору файла /etc/fstab, открытого программой.

Программа может открывать дескрипторы не только файлов, но также сокетов и каналов. В таких случаях адресатом символической ссылки будет строка "socket" или "pipe", а не имя файла либо устройства.

Оглавление книги


Генерация: 1.618. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз