1
我想一些數據傳遞到OpenSSL的這樣寫OpenSSL的標準輸入輸出在C:使用管
int fd[2];
char buff[MAXBUFF];
pid_t childpid;
pipe(fd);
childpid = fork();
if (childpid == 0){
dup2(0, fd[0]);
close(fd[1]);
execlp("openssl", "s_client", "-connect", "imap.gmail.com:993", "-crlf", NULL);
}
else {
close(fd[0]);
dosomething(buff);
write(fd[1], buff, strlen(buff) + 1);
sleep(4);
}
但好像OpenSSL的不得到BUFF的數據,它只是掛起等待一些輸入我認爲。 如果我做同樣的事情在bash
a.sh:
.
.
.
echo $data
sleep 3
.
.
.
b.sh:
openssl s_client -connect imap.gmail.com:993 -crlf
./a.sh | ./b.sh
一切工作正常。
你可以嘗試沖洗管道? – orion78fr
確實buff是否包含尾隨換行符? – Ctx
@ orion78fr嗯,我試圖將fd [1]複製到父進程中的stdout,然後使用printf和fflush寫入管道,並且它不再工作。 – vacso