作者EdisonX (閉上眼的魚)
看板C_and_CPP
標題[問題] 關於無緩衝函式
時間Mon Oct 15 16:27:18 2012
開發平台(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