Kniga-Online.club
» » » » Основы программирования в Linux - Мэтью Нейл

Основы программирования в Linux - Мэтью Нейл

Читать бесплатно Основы программирования в Linux - Мэтью Нейл. Жанр: Интернет год 2004. Так же читаем полные версии (весь текст) онлайн без регистрации и SMS на сайте kniga-online.club или прочесть краткое содержание, предисловие (аннотацию), описание и ознакомиться с отзывами (комментариями) о произведении.
Перейти на страницу:

bash [email protected]:~/BLP4e/chapter03>

Вы видите несколько сеансов терминалов, запустивших командную оболочку bash и сеанс передачи файла, выполняющий программу ftp. Просмотрев каталог /proc, вы получите более подробную информацию о сеансе ftp.

В данном случае для ftp задан идентификатор процесса 9118, поэтому вы должны заглянуть в каталог /proc/9118 для получения подробной информации о нем:

$ <b>ls -l /proc/9118</b>

total 0

0 dr-xr-xr-x 2 neil users 0 2007-05-20 07:43 attr

0 -r-------- 1 neil users 0 2007-05-20 07:43 auxv

0 -r--r--r-- 1 neil users 0 2007-05-20 07:35 cmdline

0 -r--r--r-- 1 neil users 0 2007-05-20 07:43 cpuset

0 lrvxrwxrwx 1 neil users 0 2007-05-20 07:43 cwd -&gt; /home/neil/BLP4e/chapter03

0 -r-------- 1 neil users 0 2007-05-20 07:43 environ

0 lrwxrwxrwx 1 neil users 0 2007-05-20 07:43 exe -&gt; /usr/bin/pftp

0 dr-x------ 2 neil users 0 2007-05-20 07:19 fd

0 -rw-r--r-- 1 neil users 0 2007-05-20 07:43 loginuid

0 -r--r--r-- 1 neil users 0 2007-05-20 07:43 maps

0 -rw------- 1 neil users 0 2007-05-20 07:43 mem

0 -r--r--r-- 1 neil users 0 2007-05-20 07:43 mounts

0 -r-------- 1 neil users 0 2007-05-20 07:43 mountstats

0 -rw-r--r-- 1 neil users 0 2007-05-20 07:43 oom_adj

0 -r--r--r-- 1 neil users 0 2007-05-20 07:43 oom_score

0 lrwxrwxrwx 1 neil users 0 2007-05-20 07:43 root -&gt; /

0 -rw------- 1 neil users 0 2007-05-20 07:43 seccomp

0 -r--r--r-- 1 neil users 0 2007-05-20 07:43 smaps

0 -r--r--r-- 1 neil users 0 2007-05-20 07:33 stat

0 -r--r--r-- 1 neil users 0 2007-05-20 07:43 statm

0 -r--r--r-- 1 neil users 0 2007-05-20 07:33 status

0 dr-xr-xr-x 3 neil users 0 2007-05-20 07:43 task

0 -r--r--r-- 1 neil users 0 2007-05-20 07:43 wchan

В данном перечне вы видите разные специальные файлы, способные сообщить вам, что происходит с процессом.

Можно сказать, что выполняется программа /usr/bin/pftp, и ее текущий рабочий каталог — home/neil/BLP4e/chapter03. Есть возможность прочитать другие файлы из этого каталога, чтобы увидеть командную строку, применяемую для запуска программы, а также ее окружение. Файлы cmdline и environ предоставляют эту информацию в виде последовательности нуль-терминированных строк, поэтому вам следует соблюдать осторожность при их просмотре. Более подробно окружение ОС Linux мы обсудим в главе 4.

$ <b>od -с /proc/9118/cmdline</b>

0000000 f  t  p  1  9  2  .  1  6  8  .  0  .  1  2

0000020

0000021

Из полученного вывода видно, что ftp была запущена из командной строки ftp 192.163.0.12.

Подкаталог fd предоставляет информацию об открытых дескрипторах файлов, используемых процессом. Эти данные могут быть полезны при определении количества файлов, одновременно открытых программой. На каждый открытый дескриптор приходится один элемент; имя его соответствует номеру дескриптора. В нашем случае, как мы и ожидали, у программы ftp есть открытые дескрипторы 0, 1, 2 и 3. Они включают стандартные дескрипторы ввода, вывода и потока ошибок плюс подключение к удаленному серверу.

$ <b>ls /proc/9118/fd</b>

0 1 2 3

Более сложные приемы: fcntl и mmap

Теперь мы коснемся приемов, которые вы можете пропустить, поскольку они редко используются. Признавая это, мы помещаем их в книгу просто для вашего сведения, потому что применение описываемых средств может предоставить простые решения для замысловатых проблем.

fcntl

Системный вызов fcntl предоставляет дополнительные методы обработки низкоуровневых дескрипторов файлов:

<b>#include &lt;fcntl.h&gt;</b>

<b>int fcntl(int fildes, int cmd);</b>

<b>int fcntl(int fildes, int cmd, long arg);</b>

С помощью системного вызова fcntl вы можете выполнить несколько разнородных операций над открытыми дескрипторами файлов, включая их дублирование, получение и установку флагов дескрипторов файлов, получение и установку флагов состояния файла и управление блокировкой файла (advisory file locking).

Различные операции выбираются разными значениями параметра команды cmd, как определено в файле fcntl.h. В зависимости от выбранной команды системному вызову может потребоваться третий параметр arg.

□ fcntl(fildes, F_DUPFD, newfd) — этот вызов возвращает новый дескриптор файла с числовым значением, равным или большим целочисленного параметра newfd. Новый дескриптор — копия дескриптора fildes. В зависимости от числа открытых файлов и значения newfd этот вызов может быть практически таким же, как вызов dup(fildes).

□ fcntl(fildes, F_GETFD) — этот вызов возвращает флаги дескриптора файла, как определено в файле fcntl.h. К ним относится FD_CLOEXEC, определяющий, закрыт ли дескриптор файла после успешного вызова одного из системных вызовов семейства exec.

□ fcntl(fildes, F_SETFD, flags) — этот вызов применяется для установки флагов дескриптора файла, как правило, только FD_CLOEXEC.

□ fcntl(fildes, F_GETFL) и fcntl(fildes, F_SETFL, flags) — эти вызовы применяются, соответственно, для получения и установки флагов состояния файла и режимов доступа. Вы можете извлечь режимы доступа к файлу с помощью маски O_ACCMODE, определенной в файле fcntl.h. Остальные флаги включают передаваемые значения в третьем аргументе вызову open с использованием O_CREAT. Учтите, что вы не можете задать все флаги. В частности, нельзя задать права доступа к файлу с помощью вызова fcntl.

Перейти на страницу:

Мэтью Нейл читать все книги автора по порядку

Мэтью Нейл - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки kniga-online.club.


Основы программирования в Linux отзывы

Отзывы читателей о книге Основы программирования в Linux, автор: Мэтью Нейл. Читайте комментарии и мнения людей о произведении.


Уважаемые читатели и просто посетители нашей библиотеки! Просим Вас придерживаться определенных правил при комментировании литературных произведений.

  • 1. Просьба отказаться от дискриминационных высказываний. Мы защищаем право наших читателей свободно выражать свою точку зрения. Вместе с тем мы не терпим агрессии. На сайте запрещено оставлять комментарий, который содержит унизительные высказывания или призывы к насилию по отношению к отдельным лицам или группам людей на основании их расы, этнического происхождения, вероисповедания, недееспособности, пола, возраста, статуса ветерана, касты или сексуальной ориентации.
  • 2. Просьба отказаться от оскорблений, угроз и запугиваний.
  • 3. Просьба отказаться от нецензурной лексики.
  • 4. Просьба вести себя максимально корректно как по отношению к авторам, так и по отношению к другим читателям и их комментариям.

Надеемся на Ваше понимание и благоразумие. С уважением, администратор kniga-online.


Прокомментировать
Подтвердите что вы не робот:*
Подтвердите что вы не робот:*