0
我已經寫了重定向代碼使用管道,也寫了使用popen之後。 我發現奇怪的輸出順序。如何提示顯示早於popen調用的stdout?
#include <stdio.h>
int main(){
FILE* fp;
fp=popen("mkpasswd -msha-512 -Sqwertyabc asdf","r");
char buf[120];
fscanf(fp,"%s",buf);
printf("result : %s\n",buf);
fp=popen("mkpasswd -msha-512 -Sqwertyabc","w");
fprintf(fp,"asdf");
//fflush(fp);
return 0;
}
~/workspace/tmp$ ./a.out
result : $6$qwertyabc$zctY7qCE/1e0b4iw0E.saKy6/QvVap4Ejdh16iTDc2dTM2n0tjtam/XikbYX02i/nnAjJopuIa2hQ.//wcZt80
~/workspace/tmp$ Password: $6$qwertyabc$.32ixI96wLr3h2nfYR9opTW3KFVuHWDFyI36JID.DI1riXs0glb/pzmNvdNEaoLDdEV3UkqxspBUruOzLMVMN/
不管我commentize或不是 'fflush',我的提示顯示出來早於後者mkpasswd「呼叫的輸出。
這怎麼可能是這樣的?我應該知道些什麼?
恐怕這不正確。 我試過了,但事實證明是一樣的。另外,我的觀點是關於二線和三線,而不是一線和二線。 另外,你說的是stderr比stdout更快顯示(stderr沒有緩存,但標準輸出是),但它是關於延遲顯示stderr甚至晚於進程結束(即時顯示後的意思)。 – user3293793 2014-11-01 02:39:18
Oups,我應該完全讀你的問題,並測試我的答案:-( - 現在是正確的... – 2014-11-01 09:43:13
哦,我現在看到。謝謝你的回答和評論有關的問題。 – user3293793 2014-11-03 00:40:26