c - 从管道中读取一个字符串

标签 c linux fork

我有以下代码:

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。

关于c - 从管道中读取一个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17529070/

相关文章:

c - 我们什么时候需要在信号处理程序中再次建立信号功能?

linux - 合并多个文件的更快方法

unix - 关闭子进程中打开的文件描述符

C 指针而不是 union

C 警告 : incompatible pointer types passing

c - 将数组传递给函数未给出正确答案

c - 如果您 fork() 并且 fork 的(子)进程退出,所有 VM 页面在父进程中是否仍标记为 COW?

.net - TCP 慢启动算法是许多单个文件传输缓慢的原因吗?

linux - ARM 上的视频捕获

C 使用 fork() 共享内存