Linux下串列埠通訊詳解(下)讀寫串列埠及關閉串列埠
上一篇部落格是串列埠的開啟及配置,部落格連結http://blog.csdn.net/specialshoot/article/details/50707965
這一篇我將要把讀寫串列埠及串列埠關閉的操作詳細介紹一下。
讀串列埠
讀串列埠就是接收串列埠資料,通過read來實現。
read函式原型:
#include <unistd.h>
ssize_t read(int fd, void *buf, size_t count);
引數說明:
- fd:檔案描述符
- *buf:緩衝區,讀取的資料會被放到這個緩衝區中去
- count:請求讀取的位元組數,讀上來的資料儲存在緩衝區buf中,同時檔案的當前讀寫位置向後移。
nread=read(fd,buff,8);//讀串列埠
printf("nread=%d,%s\n",nread,buff);
注意:read預設為阻塞模式,若在open操作中設定O_NONBLOCK則是非阻塞模式。在阻塞模式中,read沒有讀到資料會阻塞住,直到收到資料;非阻塞模式read沒有讀到資料會返回-1不會阻塞。
如果是非阻塞模式,read要放在迴圈中保證持續讀資料:
while(1) {
非阻塞read(裝置1);
if(裝置1有資料到達)
處理資料;
非阻塞read(裝置2);
if(裝置2有資料到達)
處理資料;
...
sleep(n);
}
sleep(n)的目的是為了做個延遲防止一直在迴圈做無用功,在延遲等待的時候可以排程其它程式。
如果是阻塞模式,便可以直接呼叫read,不用放在while迴圈中。
阻塞模式有出現一個問題,見下面程式碼:
#include<unistd.h>
#include<stdlib.h>
int main(void){
char buf[10];
int n;
n=read(STDIN_FILENO,buf,10);
if(n<0){
perror("read STDIN_FILENO");
exit(1);
}
write(STDOUT_FILENO,buf,n);
return 0;
}
編譯後執行如下圖所示:
大家可以看到第一次輸入hello沒有問題,第二次輸入helloworldhelloworld後helloworld這10個字元列印出來,程式退出後,Shell繼續讀取使用者輸入的命令,於是讀走了終端裝置輸入緩衝區中剩下的字元和換行符當做一條命令去處理,執行不了顯示未找到命令。
寫串列埠
寫串列埠即傳送資料,用write函式,write函式原型如下:
#include <unistd.h>
ssize_t write(int fd, const void *buf, size_t count);
引數含義同read相同,需要注意的也同read相同.設定阻塞非阻塞也會同樣的影響到write.
我上傳的程式碼有阻塞模式的,也有非阻塞模式的,大家看open中有無設定O_NONBLOCK即可判斷阻塞或是非阻塞模式。非阻塞模式read和write要放在while迴圈中。
關閉串列埠
close函式,函式原型:
#include<unistd.h>
int close(int fd);
關閉串列埠就這一個知識點,沒有其它的了。
程式碼資源連結:http://download.csdn.net/detail/specialshoot/9438578
相關文章
- Linux下PCI轉串列埠卡及USB轉串列埠Linux串列埠
- 詳解linux下的串列埠通訊開發Linux串列埠
- 串列埠資料抓取及串列埠通訊模擬串列埠
- 串列埠通訊串列埠
- linux 串列埠通訊Linux串列埠
- ROS環境下串列埠通訊ROS串列埠
- 串列埠通訊 (轉)串列埠
- 虛擬串列埠工具和串列埠除錯工具詳解 - 附下載地址串列埠除錯
- 串列埠通訊協議串列埠協議
- Android 串列埠通訊Android串列埠
- C# 串列埠通訊C#串列埠
- 11. 串列埠通訊串列埠
- 串列埠通訊型別串列埠型別
- (10)uart串列埠通訊串列埠
- 串列埠通訊利器:SerialPortStream庫詳解,輕鬆實現C#串列埠開發串列埠C#
- .NET Compact Framework下的串列埠通訊Framework串列埠
- 安卓串列埠通訊疑問安卓串列埠
- java串列埠通訊例項 -Java串列埠
- VC++ 串列埠通訊(轉)C++串列埠
- 串列埠無法正常通訊串列埠
- VC++串列埠通訊程式設計詳解C++串列埠程式設計
- Arduino下的STM32的串列埠通訊UI串列埠
- 通過串列埠進行通訊 :串列埠
- 你真的瞭解串列埠嗎(示波器串列埠波形分析)串列埠
- AndroidSerialPort:安卓串列埠通訊庫Android安卓串列埠
- 串列埠通訊gui介面顯示串列埠GUI
- Android藍芽串列埠通訊Android藍芽串列埠
- VC++ 的串列埠通訊 (轉)C++串列埠
- 小型plc串列埠通訊簡介串列埠
- 安卓下的串列埠測試安卓串列埠
- 串列埠UART串列埠
- Linux 串列埠程式設計 串列埠裝置程式開發Linux串列埠程式設計
- 帶內串列埠 在串列埠中輸入命令串列埠
- 串列埠通訊系列六-串列埠與上位機通訊呼叫Flash及Flash視訊切換(非互動)串列埠
- UART串列埠及Linux實現串列埠Linux
- Linux下串列埠程式設計基礎Linux串列埠程式設計
- STM32串列埠通訊串列埠
- C#串列埠通訊遇到的坑C#串列埠