用c ++来调用shell

时间:2014-01-08 03:55:04

标签: c++ shell pipe dup2

我在主进程中得到一个字符串,然后我分叉子进程,将流从父进程传递到子进程。子进程使用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

0 个答案:

没有答案