[STDIN] программа B), Unix, Solaris, Linux, AIX, HPUX, Sun Microsystems, операционных систем, Unix команды, Ubuntu, Red Hat, Suse, Mandrake Юникса, BSD, FreeBSD, SCO, Shell, узнать Unix, BSD, DOS, компьютер, программирование, Unix grep, Баш, KSH, SH, Shell , Unix учебник, учиться Unix. скачать Unix. Unix команды" />
![]() |
Здравствуйте и добро от Соединенных Штатов UNIX и Linux Форумы! Благодарим Вас за посещение и вступления нашей мирового сообщества.
|
|
Google unix.com
|
|||||||
| Форумы | Регистрация | Правила форума | Ссылки | Альбомы | ЧАВО | Список участников | Календарь | Поиск | Сегодняшние сообщения | Отметить форумы читать |
| UNIX для чайников Вопросы И Ответы Если вы не уверены в том, где разместить UNIX или Linux вопрос, задайте его здесь. Все UNIX и Linux приветствуем новичков!! |
Подробнее UNIX и Linux Темы форума можно найти полезные
|
||||
| Нить | Резьба для начинающих | Форум | Ответы | Последнее сообщение |
| Программа для отслеживания выполнения другой программы | jiten_hegde | Программирования высокого уровня | 3 | 08-19-2008 05:26 AM |
| C + + Как использовать трубы () И вилка () с STDIN вывода на другую программу | vvaidyan | Программирования высокого уровня | 2 | 05-16-2008 07:30 PM |
| Как очистить содержимое трубы (STDIN) после того, как она написана на другую программу? | vvaidyan | Программирования высокого уровня | 10 | 05-15-2008 07:08 PM |
| Как написать STDIN из другой программы (программа A -> [STDIN] программа B) | vvaidyan | Программирования высокого уровня | 1 | 04-30-2008 01:44 PM |
| Как я могу написать process_pool программы? | ударять | Программирования высокого уровня | 4 | 06-17-2002 03:36 AM |
![]() |
|
|
LinkBack | Резьба Инструменты | Искать в этом Thread | Оценить Thread | Режимы дисплея |
|
|
|
||||
|
Как написать STDIN из другой программы (программа A -> [STDIN] программа B)
Привет,
Программа A: использование труб () Я могу прочитать вывода из Progam B (STDOUT получил через систему () команды) на программу с помощью: * Ребенок -> Dup2 (FD [1], STDOUT_FILENO); -> Execl ( "/ путь / ПРОГРАММА B", "Программа Б", NULL); * Родителей -> Строка символов [100]; -> Читать (FD [0], линия, 100); Вопрос: --------- Как написать STDIN из ПРОГРАММА B от программы? * Я должен использовать другую трубу? * Как я прочитал в STDIN ПРОГРАММА B? используя CIN? Спасибо заранее, Вивек |
|
||||
|
/*
* Вот как это можно сделать ... * С помощью popen () * # включить <sys/types.h> # включить <fcntl.h> # включить <stdio.h> # включить <stdlib.h> # включить <unistd.h> # определить READ 0 определить WRITE # 1 pid_t popen2 (Const символ * команды * infp INT, INT * outfp) ( INT p_stdin [2], p_stdout [2]; pid_t PID; если (труба (p_stdin)! \u003d 0 | | труба (p_stdout)! \u003d 0) вернуться -1; PID \u003d вилка (); если (PID <0) вернуться PID; остальное, если (PID \u003d\u003d 0) ( CLOSE (p_stdin [WRITE]); dup2 (p_stdin [Прочитать], чтение); CLOSE (p_stdout [читать]); dup2 (p_stdout [WRITE], WRITE); execl ( "/ бен / ш", "ш", "-C", команда, NULL); perror ( "execl"); выход (1); ) если (infp \u003d\u003d NULL) CLOSE (p_stdin [WRITE]); еще * infp \u003d p_stdin [WRITE]; если (outfp \u003d\u003d NULL) CLOSE (p_stdout [читать]); еще * outfp \u003d p_stdout [читать]; вернуться PID; ) / * * Теперь в главном ... infp будет STDIN (в файле дескриптора) * И outfp будет стандартный вывод (из файла дескриптора) * Весело * / INT основных (INT argc, символ ** argv) ( INT infp, outfp; символ BUF [128]; если (popen2 ( "своего программно-B", И infp, И outfp) <\u003d 0) ( printf ( "Не удается EXEC своего программно-B \ N"); выход (1); ) memset (BUF, 0x0, sizeof (BUF)); писать (infp, "Z \ N", 2); писать (infp, "D \ N", 2); писать (infp, "A \ N", 2); писать (infp, "C \ N", 2); CLOSE (infp); читать (outfp, BUF, 128); printf ( "BUF \u003d '% S' \ N", BUF); возврат 0; ) |
|
||||
|
Также обратите внимание: popen является одним из путей решения - выбрать либо писать или читать с ребенком процесса, popen не позволит вам делать и в то же время. В противном случае, вы получите более интересные и современные межпроцессного взаимодействия (МПК) программ, как, возможно, трубы.
|
|
||||
|
Цитата:
Код:
if (popen2("your-program-B", &infp, &outfp) <= 0)
{
printf("Unable to exec your-program-B\n");
exit(1);
}
memset (buf, 0x0, sizeof(buf));
/*
* writing to stdin here
*/
write(infp, "Z\n", 2);
write(infp, "D\n", 2);
write(infp, "A\n", 2);
write(infp, "C\n", 2);
close(infp);
/*
* reading stdout here
*/
read(outfp, buf, 128);
printf("buf = '%s'\n", buf);
|
![]() |
| Закладки |
| Резьба Инструменты | Искать в этом Thread |
| Режимы дисплея | Оценить эту ветку |
|
|