[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 команды" /> Как написать STDIN из другой программы (программа A -> [STDIN] программа B) - В UNIX и Linux Форумы
The UNIX and Linux Forums  
Здравствуйте и добро от Соединенных Штатов UNIX и Linux Форумы! Благодарим Вас за посещение и вступления нашей мирового сообщества.

Go Back   В UNIX и Linux Форумы > Топ форумы > UNIX для чайников Вопросы И Ответы
.
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

Closed Thread
English Japanese Spanish French German Portuguese Italian Dutch Swedish Russian Norwegian Hungarian Hebrew Danish Bulgarian Greek Powered By Powered by Google
 
LinkBack Резьба Инструменты Искать в этом Thread Оценить Thread Режимы дисплея
Old 04-30-2008
vvaidyan vvaidyan is offline
Зарегистрированный пользователь
  
 

Регистрация: Mar 2008
Сообщений: 15
Как написать 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?

Спасибо заранее,
Вивек
Old 08-02-2008
грозный redoubtable is offline
Зарегистрированный пользователь
  
 

Регистрация: август 2008
Место проведения: Португалия
Сообщений: 242
/*
* Вот как это можно сделать ...
* С помощью 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;
)
Old 08-02-2008
Джим Макнамара jim mcnamara is offline Forum Staff  
...@...
  
 

Регистрация: Февраль 2004
Местонахождение: Н. М.
Сообщения: 5754
Также обратите внимание: popen является одним из путей решения - выбрать либо писать или читать с ребенком процесса, popen не позволит вам делать и в то же время. В противном случае, вы получите более интересные и современные межпроцессного взаимодействия (МПК) программ, как, возможно, трубы.
Old 08-02-2008
грозный redoubtable is offline
Зарегистрированный пользователь
  
 

Регистрация: август 2008
Место проведения: Португалия
Сообщений: 242
Post

Цитата:
Первоначально Послано Джим Макнамара View Post
Также обратите внимание: popen является одним из путей решения - выбрать либо писать или читать с ребенком процесса, popen не позволит вам делать и в то же время. В противном случае, вы получите более интересные и современные межпроцессного взаимодействия (МПК) программ, как, возможно, трубы.
Именно так! Определенный артикль POSIX.1-2001 Функции popen () позволяет только читать, ни писать, но не одновременно. Но если вы посмотрите внимательно на моем, я фактически не использовать popen (). Вместо этого я создал popen2 (), которая открывает две трубы для родительского процесса (infp, outfp). Попробуй, что "кошка", например.

Код:
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);
Я писал, а затем я прочитал от ребенка процесс "своего программно-B"
Closed Thread

Закладки

Резьба Инструменты Искать в этом Thread
Искать в этом Thread:

Расширенный поиск
Режимы дисплея Оценить эту ветку
Оценить эту ветку:

Отправка Правила
Вы не может Начать новую нитей
Вы не может Почтовые ответы
Вы не может Почтовые вложения
Вы не может Редактировать Ваши сообщения

BB код быть На
Смайлики являемся На
[IMG] код На
HTML-код Вне
Trackbacks являемся На
Pingbacks являемся На
Refbacks являемся На




Часовой пояс GMT -4. Текущее время 04:05 AM.


Powered By: Справка, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Язык Переводы на питание от .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
В UNIX и Linux форумы Содержание Copyright © 1993-2009. Все права Reserved.Ad управления по RedTyger

Содержание соответствующие URL-адреса в vBSEO 3.2.0