Linux下串列埠通訊詳解(下)讀寫串列埠及關閉串列埠

2021-08-27 11:04:09 字數 1331 閱讀 4204

這一篇將要把讀寫串列埠及串列埠關閉的操作詳細介紹一下。

讀串列埠就是接收串列埠資料,通過read來實現。

read函式原型:

#include ssize_t read(int fd, void *buf, size_t count);
引數說明:

如下兩句**即可:

nread=read(fd,buff,8);//讀串列埠

printf("nread=%d,%s\n",nread,buff);

注意:

read預設為阻塞模式,若在open操作中設定o_nonblock則是非阻塞模式。在阻塞模式中,read沒有讀到資料會阻塞住,直到收到資料;非阻塞模式read沒有讀到資料會返回-1不會阻塞。

如果是非阻塞模式,read要放在迴圈中保證持續讀資料:

while(1)
sleep(n)的目的是為了做個延遲防止一直在迴圈做無用功,在延遲等待的時候可以排程其它程序。

如果是阻塞模式,便可以直接呼叫read,不用放在while迴圈中。

阻塞模式有出現乙個問題,見下面**:

#include#includeint main(void)

write(stdout_fileno,buf,n);

return 0;

}

編譯後執行如下圖所示:

大家可以看到第一次輸入hello沒有問題,第二次輸入helloworldhelloworld後helloworld這10個字元列印出來,程式退出後,shell繼續讀取使用者輸入的命令,於是讀走了終端裝置輸入緩衝區中剩下的字元和換行符當做一條命令去處理,執行不了顯示未找到命令。

寫串列埠即傳送資料,用write函式,write函式原型如下:

#include ssize_t write(int fd, const void *buf, size_t count);
引數含義同read相同,需要注意的也同read相同.設定阻塞非阻塞也會同樣的影響到write.

我上傳的**有阻塞模式的,也有非阻塞模式的,大家看open中有無設定o_nonblock即可判斷阻塞或是非阻塞模式。非阻塞模式read和write要放在while迴圈中

close函式,函式原型:

#includeint close(int fd);
關閉串列埠就這乙個知識點,沒有其它的了。

Linux下串列埠通訊詳解(下)讀寫串列埠及關閉串列埠

include ssize t read int fd,void buf,size t count buf 緩衝區,讀取的資料會被放到這個緩衝區中去 count 請求讀取的位元組數,讀上來的資料儲存在緩衝區buf中,同時檔案的當前讀寫位置向後移。nread read fd,buff,8 讀串列埠 p...

Linux下串列埠通訊

1.開啟串列埠 與其他的關於裝置程式設計的方法一樣,在linux下,操作 控制串列埠也是通過操作起裝置檔案進行的。在linux下,串列埠的裝置檔案是 dev ttys0或 dev ttys1等。因此要讀寫串列埠,我們首先要開啟串列埠 char dev dev ttys0 串列埠1 int fd op...

linux 下串列埠通訊

include include include include include include include include include define baudrate b115200 baud rate 115200 define device dev ttyama0 define size...