linux關閉串口命令行 關閉linux端口命令

linux中有沒有替代windows串口編程中SetCommBreak()與ClearCommBreak()?

(一)Windows API串口通信編程概述

我們提供的服務有:網(wǎng)站制作、成都網(wǎng)站設計、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認證、衛(wèi)東ssl等。為上千多家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務,是有科學管理、有技術的衛(wèi)東網(wǎng)站制作公司

Windows環(huán)境下的串口編程與DOS環(huán)境下的串口編程有很大不同。Windows環(huán)境下的編程的最大特征之一就是設備無關性,它通過設備驅動程序將Windows應用程序同不同的外部設備隔離。Windows封裝了Windows的通信機制,這種方式稱為通信API,Windows程序可以利用Windows通信API進行編程,不用對硬件直接進行操作。這種體系被稱為Windows開放式服務體系(WOSA,Windows Open Services Architectures)。

早期的Windows3.x與Windows 9x/NT/2000的通信API有很大不同,在16位的串行通信程序中,一般使用16位的Windows API通信函數(shù)。為使大家對串口通信有一全面的理解,下面簡單介紹一下16位的Windows API通信函數(shù):

(1) 打開和關閉串口

OpenComm()打開串口資源,并指定輸入、輸出緩沖區(qū)的大?。ㄒ宰止?jié)計);

CloseComm()關閉串口;

例:

int idComDev;

idComdev=OpenComm(“COM1”,1024,512);

CloseComm(idComDev);

(2) 初始化串口

BuildCommDCB()、setCommState()填寫設備控制塊DCB,然后對已打開的串口進行參數(shù)配置,例:

DCB dcb;

BuildCommDCB(〝COM1:2400,n,8,1〞,dcb);

SetCommState(dcb);

(3) 對串口進行讀寫

ReadComm、WriteComm()對串口進行讀寫操作,即數(shù)據(jù)的接收和發(fā)送。例:

char *m_pReceive; int count;

ReadComm(idComDev,m_pReceive,count);

Char wr[30]; int count2;

WriteComm(idComDev,wr,count2);

通過對以上的描述我們可以看出,16位以下的串口通信程序最大的特點就在于串口等外部設備的操作有自己特有的API函數(shù)。

Windows 9x/NT/2000中的API一般都支持32位的操作,因此又稱為Win32API。為了在上述系統(tǒng)中實現(xiàn)串行數(shù)據(jù)傳送,可以使用Win32通信API。Win32通信API基本上是一個串行端口API,不是很適合于局域網(wǎng)(LAN)通信。雖然在線路上發(fā)送數(shù)據(jù)之前,LAN通常將數(shù)據(jù)位串行化,這和窗口或調(diào)制解調(diào)器發(fā)送數(shù)據(jù)之前所作的工作一模一樣,但局域網(wǎng)使用的線路的位數(shù)通常比串口少,而且還使用與串口協(xié)議很少有類似之處的訪問、路由、安全性和糾錯協(xié)議。局域網(wǎng)通信所需要的協(xié)議層使得Win32通信API對于這些應用來說很不理想。因此,在網(wǎng)絡通信和連接方面,TCP/IP協(xié)議要比Win32通信API更適合一些。

Windows操作系統(tǒng)是一個可搶占式的操作系統(tǒng),所以Windows應用程序常常有被別的程序搶占時間片的可能,因此Win32通信API也不能用于實時通信。實時通信的質量與時間密切相關。例如,數(shù)字化音頻數(shù)據(jù)是實時數(shù)據(jù),因為話音的質量依賴于播放它的速率。在錄制音頻時,它就以某個速度被數(shù)字化了,該速度就是人們所熟知的采樣速率。聲音必須以相同的采樣率重放,否則聽起來就會太慢或太快。實際中的視頻播放,也不是實時播放,那僅僅是存放在緩沖中的那部分數(shù)據(jù)。因此,不需要許多協(xié)議層的交互式、非實時的通信可以采用Win32通信API來實現(xiàn)。Win32通信API把串口操作(以及并口等)和文件操作統(tǒng)一起來了,使用類似的操作來實現(xiàn)。

(二) Windows串口通信相關API函數(shù)

“工欲善其事,必先利其器”,這一節(jié)將從使用的角度出發(fā),對和串口通信相關的32位的Windows API函數(shù)進行介紹,力圖使你們對其有個全面、準確的認識。

2.1 打開和關閉串口

1. 打開串口

在32位的Windows系統(tǒng)中,串口和其它通信設備是作為文件處理的。串口的打開、關閉、讀取和寫入所用的函數(shù)與操作文件的函數(shù)完全一致。

通信會話以調(diào)用CreateFile()開始。CreateFile()為讀訪問、寫訪問或讀寫訪問“打開”串口。按照Windows的通常做法,CreateFile()返回一個句柄,隨后在打開的端口的操作中使用CreateFile()函數(shù)非常復雜,復雜性的原因之一是它是通用的??梢允褂肅reateFile打開已存在的文件,創(chuàng)建新文件和打開根本就不是文件的設備,例如串口、并口和調(diào)制解調(diào)器。CreateFile()函數(shù)聲明如下:

HANDLE CreateFile(

LPCTSTR lpszName,

DWORD fdwAccess,

DWORD fdwShareMode,

LPSECURITY_ATTRIBUTES lpsa,

DWORD fdwCreate,

DWORD fdwAttrsAndFlags,

HANDLE hTemplateFile

)

CreateFile函數(shù)中的參數(shù)解釋如下:

·lpszName:指定要打開的串口邏輯名,用字符串表示,如“COM1”和“COM2”分別表示串口1和串口2。

·fdwAccess:用來指定串口訪問的類型。與文件一樣,串口也是可以被打開以供讀取、寫入或者兩者兼有。

GENERIC_READ位讀取訪問打開端口,GENERIC_READ位寫訪問打開端口。這兩個常數(shù)定義如下:

const GENERIC_READ = 0x80000000h;

const GENERIC_WRITE = 0x40000000h;

用戶可以用邏輯操作將這兩個標識符連接起來,為讀/寫訪問權限打開端口。因為大部分串口通信都是雙向的,因此常常在設置中將兩個標識符連接起來使用。如:

fdwAccess = GENERIC_READ | GENERIC_WRITE;

·fdwShareMode:指定該端口的共享屬性。該參數(shù)是為那些由許多應用程序共享的文件提供的。對于不能共享的串口,它必須設置為0。這就是文件與通信設備之間的主要差異之一。如果在當前的應用程序調(diào)用CreateFile()時,另一個應用程序已經(jīng)打開了串口,該函數(shù)就會返回錯誤代碼,原因是兩個應用程序不能共享一個端口。然而,同一個應用程序的多個線程可以共享由CreateFile()返回的端口句柄,并且根據(jù)安全性屬性設置,該句柄可以被打開端口的應用程序的子程序所繼承。

·Ipsa:引用安全性屬性結構(SECURITY_ARRTIBUTES),該結構定義了一些屬性,例如通信句柄如何被打開端口的應用程序的子程序所繼承。將該參數(shù)設置為NULL將為該端口分配缺省的安全性屬性。子應用程序所繼承的缺省屬性是該端口不能被繼承的。

安全屬性結構SECURITY_ARRTIBUTES結構聲明如下:

typedef struct_SECURITY_ARRTIBUTE {

DWORD nLength;

LPVOID lpSecurityDescriptor;

BOOL bInheritHandle;

} SECURITY_ARRTIBUTE;

SECURITY_ARRTIBUTES結構成員nLength指明該結構的長度,lpSecurityDescriptor指向一個安全描述字符,bInheritHandle表明句柄是否能被繼承。

·fdwCreate:指定如果CreateFile()正在被已有的文件調(diào)用時應采取的動作。因為串口總是存在,fdwCreate必須設置成OPEN_EXISTING。該標志告訴Windows不用企圖創(chuàng)建新端口,而是打開已經(jīng)存在的端口。OPEN_EXISTING常數(shù)定義為:

const OPEN_EXISTING = 3;

·fdwAttrsAndFlags:描述了端口的各種屬性。對于文件來說,有可能具有很多屬性,但對于串口,唯一有意義的設置是FILE_FLAG_OVERLAPPED。當創(chuàng)建時指定該設置,端口I/O可以在后臺進行(后臺I/O也叫異步I/O)。FILE_FLAG_OVERLAPPED常數(shù)定義如下:

const FILE_FLAG_OVERLAPPED = 0x40000000h

·hTemplateFile:指向模板文件的句柄,當端口處于打開狀態(tài)時,不使用該參數(shù),因而必須置成0。

調(diào)用CreateFile()函數(shù)打開COM1串口操作的例子如下所示:

HANDLE hCom;

DWORD dwError;

hCom=CreateFile(“COM1”, // 文件名

GENERIC_READ | GENERIC_WRITE, // 允許讀和寫

0, // 獨占方式

NULL,

OPEN_EXISTING, // 打開而不是創(chuàng)建

FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, // 重疊方式

NULL

);

if(hCom = = INVALID_HANDLE_VALUE)

{

dwError=GetLastError(); // 處理錯誤

}

一旦端口處于打開狀態(tài),就可以分配一個發(fā)送緩沖區(qū)和接收緩沖區(qū),并且通過調(diào)用SetupComm()實現(xiàn)其它初始化工作。也可以不調(diào)用SetupComm()函數(shù),Windows系統(tǒng)也會分配缺省的發(fā)送和接收緩沖區(qū),并且初始化端口。但為了保證緩沖區(qū)的大小與實際需要的一致,最好還是調(diào)用該函數(shù)。SetupComm()函數(shù)聲明如下:

BOOL SetupComm(

HANDLE hFile, // 通信設備句柄

DWORD dwInQueue, // 輸入緩沖區(qū)大小

DWORD dwOutQueue // 輸出緩沖區(qū)大小

);

SetupComm()函數(shù)中各項含義說明如下:

·hFile: 由GreatFile()返回的指向已打開端口的句柄。

·dwInQueue和dwOutQueue: 接收緩沖區(qū)的大小和發(fā)送緩沖區(qū)的大小。這兩個定義并非是實際的緩沖區(qū)的大小,指定的大小僅僅是“推薦的”大小,而Windows可以隨意分配任意大小的緩沖區(qū)。Windows設備驅動程序可以獲得這兩個數(shù)據(jù),并不直接分配大小,而使用來優(yōu)化性能和避免緩沖區(qū)超限。

注意:當使用CreateFile()函數(shù)打開串口時:為實現(xiàn)調(diào)制解調(diào)器的排他性訪問,共享標識必須設為零;創(chuàng)建標識必須設為OPEN_EXISTING;模板句柄必須置為空。

2. 關閉串口

關閉串口比打開串口簡單得多,只需要調(diào)用CloseHandle()函數(shù)關閉由CreateHandle()函數(shù)返回得句柄即可。

CloseHandle函數(shù)聲明如下:

BOOL CloseHandle(

HANDLE hObject // 需關閉的設備句柄

);

使用串口時一般要關閉它,如果忘記關閉串口,串口就會始終處于打開狀態(tài),其它應用程序就不能打開并使用串口了。

附上出處鏈接:

如何關閉linux系統(tǒng)的虛擬機的命令行

取消bell報警聲的方法:登陸linux系統(tǒng)vi

/etc/inputrc找到set

bell-style

none

將前面的#去掉,之后重啟系統(tǒng)即可解決聲音問題若不見效可以通過下面的方式解決下bell-style的取值范圍是:none,

visible,

audible,

vi

/etc/inputrc中的set

bell-style

visible前的#去掉,若找不到這個參數(shù)可以自己添加,一般這樣都可以解決聲音問題。2.消除vi編輯器里的報警聲:在/etc/bashrc中加入一行:setterm

-blength

0保存并重啟系統(tǒng)即可。

怎么取消linux命令行輸入的命令

如果在命令行下使用gedit, 關閉程序窗口(一般先保存文件),就自動退到命令行界面。 如果在命令行下使用vim,先按下ESC退出編輯模式,然后輸入:wq 保存并退出或者q退出或者q!強制退出,從而回到命令行界面。

Linux怎么把串口設置

簡單的運行 dmesg 命令

$ dmesg | grep tty

輸出:

[ 37.531286] serial8250: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A

[ 37.531841] 00:0b: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A

[ 37.532138] 0000:04:00.3: ttyS1 at I/O 0x1020 (irq = 18) is a 16550A

setserial 命令

setserial 是一個程序用于設定并/或報告某個串口關聯(lián)的配置信息。該信息包括串口用到的I/O 端口和中斷號,以及Break鍵是否應被解釋為Secure Attention Key 等等。 僅僅是輸出如下的命令:

$ setserial -g /dev/ttyS[0123]

輸出:

/dev/ttyS0, UART: 16550A, Port: 0x03f8, IRQ: 4

/dev/ttyS1, UART: 16550A, Port: 0x1020, IRQ: 18

/dev/ttyS2, UART: unknown, Port: 0x03e8, IRQ: 4

/dev/ttyS3, UART: unknown, Port: 0x02e8, IRQ: 3

帶-g選項的setserial幫助找到你的Linux板子上的物理串口。

Linux 串口控制臺程序

一旦串口被確定了,你就能使用許多的工具來配置Linux板子:

minicom- 用于控制modem和連接到dump 設備的最好的串口通信程序。

wvidial or other GUI dial up networking program - 一個內(nèi)建智能PPP 撥號器。

getty / agetty - agetty 打開一個 tty 端口, 提示登錄名稱并調(diào)用 /bin/login 命令。

grub / lilo configuration - 配置串口為系統(tǒng)控制臺。

linux怎么鎖住串口,禁止其他程序使用,即禁止其他程序進行讀寫操作,即使是root用戶也不允許讀

應該是沒有這樣的辦法的。

linux系統(tǒng)基本上不會禁止root的權限,即使你想辦法禁止了,也有辦法打開,除非那不是真正的root。

你應該換一個思路來解決你的問題。比如除了你的程序,沒有其他程序運行在這臺電腦上,沒有其他用戶有權訪問這臺電腦,不就解決了嗎?

Linux串口相關的操作及綁定

@ toc

可在控制臺輸入

也可以用stty設置串口參數(shù)

使用后相當于串口回傳,發(fā)什么回什么

發(fā)送數(shù)據(jù)

可以對串口發(fā)送數(shù)據(jù)比如對com1口

一般情況下串口的名稱全部在dev下面,如果你沒有外插串口卡的話默認是dev下的ttyS* ,一般ttyS0對應com1,ttyS1對應com2,當然也不一定是必然的;

如果有ttyS設備,再看/dev/有沒有ttyS*,如沒有就建立一個:

如果板子的設備中沒有標準串口設備ttyS0,也沒有ttySAC0。/dev下應該有一個USB串口:/dev/ttyUSB0.

當一個串行卡或數(shù)據(jù)卡被偵測到時,它會被指定成為第一個可用的串行設備。通常是/dev/ttyS1(cua1)或/dev/ttyS2(cua2),這完成看原已內(nèi)建的串口數(shù)目。ttyS*設備會被報告在/var/run/stab內(nèi)。

PC上的串口一般是ttyS,板子上Linux的串口一般叫做ttySAC

可能是linux下的串口設備沒有打開,需要改變串口設備

的權限,或者根據(jù)文章頭添加用戶到組處理

可以通過以下命令 查看 板子上的硬件端口的內(nèi)核設備名

該條命令會將 ttyUSB0所對應的硬件端口的kernel設備名 顯現(xiàn)出來, 得到KERNEL== '1-5.5.4', 而不是之前的ttyUSB0

cmd.sh如下:

./getUSB.py 調(diào)用當前路徑下的getUSB.py這個Python語言,明確此次是哪個,ttyUSB0,或者ttyUSB1掛載在端口3-1.1上

getUSB.py:

完成之后 ,設置開機啟動cmd.sh(在/etc/rc.local中設置)則每次開機之后,會從/dev/ttydata獲取到固定端口的數(shù)據(jù)

方式一

寫入內(nèi)容如下:

方式二

我的硬件序列號:ATTRS{serial}=="FTSYWCXZ"這個號是唯一的

可以通過/dev/usb_0打開串口設備

常用的匹配類型:

當前文章:linux關閉串口命令行 關閉linux端口命令
網(wǎng)頁地址:http://muchs.cn/article38/doscdpp.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站收錄、網(wǎng)站內(nèi)鏈、品牌網(wǎng)站設計、、響應式網(wǎng)站、移動網(wǎng)站建設

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

綿陽服務器托管