[問題] 關於無緩衝函式

看板C_and_CPP作者 (閉上眼的魚)時間12年前 (2012/10/15 08:27), 編輯推噓1(1012)
留言13則, 4人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) Code::Blocks / Visual C++ 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) fcntl.h / io.h 問題(Question): 算蠻古老的一堆函式,我知道現在都用 Win32 API / GDI 做比較多,純好奇想問。 < 其實是如果可以用的話會省很多開發時間吧! > 我想確認,早期可用 setmode 與無緩衝函式進行 rs232 傳輸與列表機輸出, 細節上我沒找到範例 (像 fd 是來自哪個 LPT1/LP2 、COM1/2 設定等), C::B 與 VS2012 至今還保留這些函式沒拿掉,但下例卻沒辦法從列表機輸出, 原因是因我手上的 printer 吃 usb,不走 LPT ?? 還是其實這幾支函式對於硬體通訊之支緩已有限,只為歷史因素才保留? 程式碼(Code):(請善用置底文網頁, 記得排版) #include <fcntl.h> #include <io.h> #include <stdio.h> int main() { int fd, ch; int fc = 4; /* printer */ setmode(fc, O_TEXT); fd = open("mat.txt", O_RDONLY | O_TEXT); while(read(fd, &ch, sizeof(ch))){ write(fc, &ch, sizeof(ch)); } close(fd); return 0; } 補充說明(Supplement): 另外想問一些有經驗版友,fc 改 1 時 (輸出到 montior), 會有原本排版跑掉的情況,不知是否小弟哪裡觀念有誤? 謝謝各位細心閱讀。 -- 「自從我學了 C# , 人都變聰明 , 考試都考一百分」 「自從我學了 VB , 皮膚都變好 , 人也變漂亮了 」 「自從我學了 Java , 明顯變壯 , 個子也變高了 」 「自從我學了 C++ , 內分泌失調 , 頭都禿了... 」 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 180.177.76.161

10/15 17:14, , 1F
輸出到螢幕的部份也許是 \n 跟 \r\n 的差別?
10/15 17:14, 1F
可能我敘述 / code 沒弄好,初步看起來不像。因加上條件判斷輸出結果也一樣 while(read(fd, &ch, sizeof(ch))){ if(ch!='\r') write(1, &ch, sizeof(ch)); } 補上截圖 http://ppt.cc/aGA4 ※ 編輯: EdisonX 來自: 180.177.76.161 (10/15 17:37)

10/16 10:27, , 2F
輸出到螢幕的話,會跟terminal行為有關,
10/16 10:27, 2F

10/16 10:28, , 3F
本義上,\r(CR)是游標移至左緣,\n(LF)是游標下移
10/16 10:28, 3F

10/16 10:30, , 4F
有些terminal行為就是這樣,也有些是\r或\n其中一個就
10/16 10:30, 4F

10/16 10:30, , 5F
包含兩個動作
10/16 10:30, 5F

10/16 10:31, , 6F
CRLF都做的話,通常是win吃\r\n linux/bsd吃\n mac吃\r
10/16 10:31, 6F

10/16 10:32, , 7F
上一行是說text editor的習慣,但terminal就更不確定,
10/16 10:32, 7F

10/16 10:40, , 8F
BBS client通常是\r\n語意分開,混合用ANSI control
10/16 10:40, 8F

10/16 10:41, , 9F
sequence移動游標,所以要你的檔案內容是否剛好符合
10/16 10:41, 9F

10/16 10:41, , 10F
terminal行為,不然就要另外轉
10/16 10:41, 10F

10/16 13:34, , 11F
@b大~開始有點亂了 @@ 我這裡都是 win 系統,所以我該怎
10/16 13:34, 11F

10/16 13:34, , 12F
麼做進行確認嗎? 謝謝。
10/16 13:34, 12F

10/16 14:08, , 13F
Mac 吃 \r 是十年前的事了
10/16 14:08, 13F
文章代碼(AID): #1GUyZfKb (C_and_CPP)