我有以下代码:
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/