我在主进程中得到一个字符串,然后我分叉子进程,将流从父进程传递到子进程。子进程使用dup2
将管道重定向到stdin并使用命令execl("/bin/sh", "sh", "echo.sh", (char*)0)
。在shell中,它将首先读取var,然后回显$ var。
但是进程在读取时挂起,就是说shell无法从stdin中读取字符串。
我想知道这个shell怎么能从我的stdin中获取我的字符串。
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中:
读取var
echo $ var