Я получаю строку в главном процессе, а затем раскладываю дочерний процесс, перенаправляя поток из родительского процесса в дочерний процесс. Дочерний процесс использует dup2
перенаправить канал на стандартный ввод и использовать команду execl("/bin/sh", "sh", "echo.sh", (char*)0)
, В оболочке сначала будет читаться var, а затем выводится $ var.
Но процесс зависает при чтении, это говорит о том, что оболочка не может прочитать строку из стандартного ввода.
Интересно, как эта оболочка могла получить мою строку от своего стандартного ввода?
int main( void )
{
int filedes[2];
int son_to_fa[2];
char buf[80];
char fabuf[100];
pipe(filedes);
pipe(son_to_fa);
if ( (fork()) > 0 )
{
printf( "This is in the father process,here write a string to the pipe.\n" );
std::string st = "Hello";
write( filedes[1], st.c_str(), st.size());
//close( filedes[0] );
//close( filedes[1] );
read(son_to_fa[0], fabuf, sizeof(fabuf));
std::cout << "father have read!" << std::endl;
}
else
{
printf( "This is in the child process,here read a string from the pipe.\n" );
//read( filedes[0], buf, sizeof(buf) );
//std::cout << buf << std::endl;
dup2(filedes[0], 0);
dup2(son_to_fa[1], 1);
execl("/bin/sh", "sh", "echo.sh", (char*)0);
}
enter code here
//waitpid( pid, NULL, 0 );
return 0;
}
в echo.sh:
читать вар
echo $ var
Задача ещё не решена.
Других решений пока нет …