[問題] freopen 用法

看板C_and_CPP (C/C++)作者 (gigigigi)時間11年前 (2015/05/25 23:36), 編輯推噓2(2012)
留言14則, 5人參與, 最新討論串1/1
https://gist.github.com/anonymous/c2f50130eacfe03582ba 為什麼再 fclose 後 printf("HHHHH"); 沒有出現 HHHH 字串 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 175.182.177.142 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1432568162.A.30A.html

05/25 23:45, , 1F
好問題, 印象中沒甚麼跨平台的解法. XD 誠徵有緣人
05/25 23:45, 1F

05/25 23:48, , 2F
困難點在於 freopen 會把原本的 stream 關掉
05/25 23:48, 2F

05/25 23:57, , 3F
windows: freopen("CON","r",stdin)
05/25 23:57, 3F

05/25 23:58, , 4F
freopen("/dev/console","r", stdin)
05/25 23:58, 4F

05/25 23:59, , 5F
如果要通用解法就靠preprocessor的define吧
05/25 23:59, 5F

05/26 00:00, , 6F
不然就靠dup來複製原本的fd
05/26 00:00, 6F

05/26 00:14, , 7F
不要用freopen 用fscanf和fprintf指定FILE就好啦
05/26 00:14, 7F

05/26 20:46, , 8F
有限制平台嗎?Windows? Linux?
05/26 20:46, 8F

05/26 21:33, , 9F
Linux 平台
05/26 21:33, 9F

05/27 10:37, , 10F
05/27 10:37, 10F

05/27 10:39, , 11F
應該可以work,並不是什麼標準作法,純粹突發奇想把FILE*
05/27 10:39, 11F

05/27 10:39, , 12F
當作是struct來複製
05/27 10:39, 12F

05/27 10:44, , 13F
windows下stdin/stdout用#define是r value, Linux則是
05/27 10:44, 13F

05/27 10:44, , 14F
l-value直接修改即可
05/27 10:44, 14F
文章代碼(AID): #1LOq5YCA (C_and_CPP)
文章代碼(AID): #1LOq5YCA (C_and_CPP)