То, что я хочу сделать, это в основном сделать из дочернего процесса стандартную запись в конец записи канала с помощью dup2 и запустить pico с помощью execvp, и родитель прочитает конец файла для чтения, сделает что-то с ним и запишет его в стандартный выход и отображать его в пико. Это запускается под Linux-машиной.
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
#include <errno.h>
int main(int argc,char* argv[])
{
char* arguments[] = {"pico", "a.txt", NULL};
int my_pipe[2];
if(pipe(my_pipe)==-1)
fprintf(stderr,"Error\n");
pid_t child_id;
child_id = fork();
if(child_id == -1)
{
fprintf(stderr, "Fork error\n");
}
if(child_id==0)
{
close(my_pipe[0]);
dup2(my_pipe[1],1); /*make standard out write in the write end of the pipe?*/
close(my_pipe[1]);
execvp("pico",arguments);
fprintf(stderr, "Exec failed\n");
exit(0);
}
close(my_pipe[1]);
char reading_buf[1];
char r[] = "S";
while(read(my_pipe[0], reading_buf,1)>0)/*read something in the pipe*/
{
write(1,r,1);/*display "S" in pico*/
}
close(my_pipe[0]);
return 0;
} /* end main */
проблема, с которой я сталкиваюсь, заключается в том, что когда я пытаюсь сделать write()
в стандартном выводе, pico не отображается в терминале, и я получаю этот странный вывод непрерывной «S» (из r), например:
SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
и это будет добавлять больше «S» всякий раз, когда я пытаюсь нажать любую клавишу. Я довольно новичок во всем этом, и любая помощь будет оценена по достоинству.
stdin
будет терминалом, и делает что-то другое (или вообще не работает), если это не так, например. еслиstdin
- труба. - person Brave Sir Robin   schedule 31.01.2014