繁体   English   中英

从管道读取字符串

[英]Read a string from pipe

我有以下代码:

int pfds[2], pid;

if (socketpair(AF_UNIX, SOCK_STREAM, 0, pfds) < 0) {
        goto error;
}

if ((pid = fork()) == -1)
    goto error;

if (pid == 0) {
    /* child */
    close(pfds[1]);
    dup2(pfds[0], 1);
    close(pfds[0]);
    const char *argv[5];
    int i = 0;
    argv[i++] = "/bin/sh";
    argv[i++] = "/sbin/script.sh";
    argv[i++] = NULL;
    execvp(argv[0], (char **) argv);
    exit(ESRCH);
}
close(pfds[0]);
s.stream.string_data = true;
s.stream.notify_read = client_read_cb;
ustream_fd_init(&s, pfds[1]);

脚本返回一个字符串(使用echo命令打印),该字符串标志着脚本加载结束。

如何读取/sbin/script.sh返回的字符串?

基本上,您缺少执行execv的子进程与将执行读取的父进程之间的区别:

char readbuffer[100];

if(pid == 0)
   ...
else
{
    close(pdfs[0];
    nbytes = read(pfds[1], readbuffer, sizeof(readbuffer));
}

但是,如果您只想等待脚本的结尾,则可以对子进程执行wait_pid。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM