Основы программирования в Linux
Основы программирования в Linux читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
Такой же вывод можно получить из командной строки с помощью следующей команды:
$ <b>echo "Once upon a time, there was..." | od -c</b>Передача данных большого объема
Механизм, применявшийся до сих пор, просто отправляет и получает все данные в одном вызове
freadfwritefreadfwriteВ упражнении 13.3 приведена программа popen3.c, читающая все данные из канала.
В этой программе вы читаете данные из вызванного процесса
ps ах#include <unistd.h>#include <stdlib.h>#include <stdio.h>#include <string.h>int main() { FILE * read_fp; char buffer[BUFSIZ + 1]; int chars_read; memset(buffer, ' ' , sizeof(buffer)); read_fp = popen("ps ax", "r"); if(read_fp != NULL) { chars_read = fread(buffer, sizeof(char), BUFSIZ, read_fp); while (chars_read > 0) { buffer[chars_read - 1] = ' '; printf("Reading %d:-n %sn", BUFSIZ, buffer); chars_read = fread(buffer, sizeof(char), BUFSIZ, read_fp); } pclose(read_fp); exit(EXIT_SUCCESS); } exit(EXIT_FAILURE);}Вывод, отредактированный для краткости, подобен приведенному далее:
$ <b>./popen3</b>Reading 1024:-PID TTY STAT TIME COMMAND 1 ? Ss 0:03 init [5] 2 ? SW 0:00 [kflushd] 3 ? SW 0:00 [kpiod] 4 ? SW 0:00 [kswapd] 5 ? SW< 0:00 [mdrecoveryd]...240 tty2 S 0:02 emacs draft1.txtReading 1024:-368 tty1 S 0:00 ./popen 3369 tty1 R 0:00 ps -ax370 ...Как это работает
Программа применяет функцию
popen"r"pspsВ этом примере строка
Reading:-BUFSIZpsBUFSIZBUFSIZBUFSIZ/10Как реализован вызов popen
Вызов
popenshВ ОС Linux (как и во всех UNIX-подобных системах) подстановка всех параметров выполняется командной оболочкой, поэтому вызов оболочки для синтаксического анализа командной строки перед вызовом программы дает возможность командной оболочке выполнить любую подстановку, например, определить реальные файлы, на которые ссылается строка *.с до того, как программа начнет выполняться. Часто это очень полезно и позволяет запускать с помощью
popenexeclНежелательный эффект применения командной оболочки состоит в том, что для каждого вызова
popenpopenpopenВ упражнении 13.4 приведена программа popen4.c, которую можно использовать для демонстрации поведения
popenpopencatwc -l$ <b>cat popen*.c | wc -l</b>На самом деле
wc -l popen*.c
