C_and_CPP 板


LINE

板友們晚安,我想透過Linux C, popen執行一個binary,並獲得binary的stdout 單執行binary 是正常的。會印出 start test,也會每隔3秒印出 但我如果透過另支程式 popen 加 fgets就會卡住,試著 fflush(fp)也無用,請問 有人知道是啥問題嗎? 謝謝。 binary code: int main () { int ret = 0; struct pollfd fds[1] = {0}; int fd = timerfd_create(CLOCK_MONOTONIC, 0); char rbuf[1024] = {0}; struct itimerspec itval; itval.it_interval.tv_sec = 3; itval.it_interval.tv_nsec = 0; itval.it_value.tv_sec = 3; itval.it_value.tv_nsec = 0; fd[0].fd = fd; fds[0]│events = POLLIN; timerfd_settime (fd, 0, &itval, NULL); printf("start test\n"); while(1) { ret = poll(fds, 1, -1); if(ret < 0) { printf("poll fail\n"); } else if(ret == 0) { printf("time out\n"); } else { read(fds[0].fd, &rbuf, 1024); } printf("finish poll\n"); } } test.c: int main() { char line[1024] = {0}; FILE *fp = popen("./burn", "r"); fflush(fp); while(fgets(line, 1022, fp) != NULL) { printf("line:%s\n", line); } printf("123\n"); return 0; } --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.224.106.216 (臺灣)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1654009328.A.496.html
1F:推 LPH66: popen 會繼承父行程你沒開 pipe 的那一端的標準輸出入 06/01 00:21
2F:→ LPH66: 以你開讀為例, 子行程的寫端會進 pipe, 但讀端會繼承父行程 06/01 00:21
3F:→ LPH66: 因此子行程等於 poll 了鍵盤輸入 stdin 06/01 00:23
4F:→ LPH66: hmmm, 仔細想想這樣跟你直接執行好像一樣...這樣就不知道了 06/01 00:25
5F:推 b0920075: 是不是卡在你的 binary stdout 的 buffer ? 06/01 04:18
6F:→ b0920075: 試試看 flush 掉你 binary 輸出的 fd? 06/01 04:19
7F:→ gn00618777: 我忘記說明,他放很久後會輸出 06/01 06:38
8F:→ gn00618777: 請問我用fflush(fp),是不是已經做flush了 06/01 06:41
9F:推 b0920075: 我是說 binary code 不是 test 06/01 10:31
10F:推 LPH66: 喔, 結果是 buffer...查了一下 \n flush 似乎只有 terminal 06/01 12:15
11F:→ LPH66: 輸出會, 如果是接去其他地方 (像這裡接到 pipe 裡) 就不會 06/01 12:16
12F:→ LPH66: 原 PO 試試 binary 裡全部 printf 後都加 fflush(stdout); 06/01 12:16
13F:→ LPH66: 另外之前看時沒注意, fflush 不能用在輸入串上 06/01 12:18
14F:→ LPH66: 你的 test 中的 fp 是輸入, 對它 fflush 是 UB 06/01 12:20
15F:→ gn00618777: 我在加了fflush到print後面,就可以了。謝謝 06/05 20:59
16F:推 yvb: setbuf(), setlinebuf() 06/23 12:52







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:BabyMother站內搜尋

TOP