看板 C_and_CPP 關於我們 聯絡資訊
開發平台(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
LPH66:輸出到螢幕的部份也許是 \n 跟 \r\n 的差別? 10/15 17:14
可能我敘述 / 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)
buganini:輸出到螢幕的話,會跟terminal行為有關, 10/16 10:27
buganini:本義上,\r(CR)是游標移至左緣,\n(LF)是游標下移 10/16 10:28
buganini:有些terminal行為就是這樣,也有些是\r或\n其中一個就 10/16 10:30
buganini:包含兩個動作 10/16 10:30
buganini:CRLF都做的話,通常是win吃\r\n linux/bsd吃\n mac吃\r 10/16 10:31
buganini:上一行是說text editor的習慣,但terminal就更不確定, 10/16 10:32
buganini:BBS client通常是\r\n語意分開,混合用ANSI control 10/16 10:40
buganini:sequence移動游標,所以要你的檔案內容是否剛好符合 10/16 10:41
buganini:terminal行為,不然就要另外轉 10/16 10:41
EdisonX:@b大~開始有點亂了 @@ 我這裡都是 win 系統,所以我該怎 10/16 13:34
EdisonX:麼做進行確認嗎? 謝謝。 10/16 13:34
uranusjr:Mac 吃 \r 是十年前的事了 10/16 14:08