成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

linux關(guān)閉串口命令行 關(guān)閉linux端口命令

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

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

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

Windows環(huán)境下的串口編程與DOS環(huán)境下的串口編程有很大不同。Windows環(huán)境下的編程的最大特征之一就是設(shè)備無(wú)關(guān)性,它通過(guò)設(shè)備驅(qū)動(dòng)程序?qū)indows應(yīng)用程序同不同的外部設(shè)備隔離。Windows封裝了Windows的通信機(jī)制,這種方式稱為通信API,Windows程序可以利用Windows通信API進(jìn)行編程,不用對(duì)硬件直接進(jìn)行操作。這種體系被稱為Windows開(kāi)放式服務(wù)體系(WOSA,Windows Open Services Architectures)。

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

(1) 打開(kāi)和關(guān)閉串口

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

CloseComm()關(guān)閉串口;

例:

int idComDev;

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

CloseComm(idComDev);

(2) 初始化串口

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

DCB dcb;

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

SetCommState(dcb);

(3) 對(duì)串口進(jìn)行讀寫

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

char *m_pReceive; int count;

ReadComm(idComDev,m_pReceive,count);

Char wr[30]; int count2;

WriteComm(idComDev,wr,count2);

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

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

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

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

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

2.1 打開(kāi)和關(guān)閉串口

1. 打開(kāi)串口

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

通信會(huì)話以調(diào)用CreateFile()開(kāi)始。CreateFile()為讀訪問(wèn)、寫訪問(wèn)或讀寫訪問(wèn)“打開(kāi)”串口。按照Windows的通常做法,CreateFile()返回一個(gè)句柄,隨后在打開(kāi)的端口的操作中使用CreateFile()函數(shù)非常復(fù)雜,復(fù)雜性的原因之一是它是通用的??梢允褂肅reateFile打開(kāi)已存在的文件,創(chuàng)建新文件和打開(kāi)根本就不是文件的設(shè)備,例如串口、并口和調(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:指定要打開(kāi)的串口邏輯名,用字符串表示,如“COM1”和“COM2”分別表示串口1和串口2。

·fdwAccess:用來(lái)指定串口訪問(wèn)的類型。與文件一樣,串口也是可以被打開(kāi)以供讀取、寫入或者兩者兼有。

GENERIC_READ位讀取訪問(wèn)打開(kāi)端口,GENERIC_READ位寫訪問(wèn)打開(kāi)端口。這兩個(gè)常數(shù)定義如下:

const GENERIC_READ = 0x80000000h;

const GENERIC_WRITE = 0x40000000h;

用戶可以用邏輯操作將這兩個(gè)標(biāo)識(shí)符連接起來(lái),為讀/寫訪問(wèn)權(quán)限打開(kāi)端口。因?yàn)榇蟛糠执谕ㄐ哦际请p向的,因此常常在設(shè)置中將兩個(gè)標(biāo)識(shí)符連接起來(lái)使用。如:

fdwAccess = GENERIC_READ | GENERIC_WRITE;

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

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

安全屬性結(jié)構(gòu)SECURITY_ARRTIBUTES結(jié)構(gòu)聲明如下:

typedef struct_SECURITY_ARRTIBUTE {

DWORD nLength;

LPVOID lpSecurityDescriptor;

BOOL bInheritHandle;

} SECURITY_ARRTIBUTE;

SECURITY_ARRTIBUTES結(jié)構(gòu)成員nLength指明該結(jié)構(gòu)的長(zhǎng)度,lpSecurityDescriptor指向一個(gè)安全描述字符,bInheritHandle表明句柄是否能被繼承。

·fdwCreate:指定如果CreateFile()正在被已有的文件調(diào)用時(shí)應(yīng)采取的動(dòng)作。因?yàn)榇诳偸谴嬖?,fdwCreate必須設(shè)置成OPEN_EXISTING。該標(biāo)志告訴Windows不用企圖創(chuàng)建新端口,而是打開(kāi)已經(jīng)存在的端口。OPEN_EXISTING常數(shù)定義為:

const OPEN_EXISTING = 3;

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

const FILE_FLAG_OVERLAPPED = 0x40000000h

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

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

HANDLE hCom;

DWORD dwError;

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

GENERIC_READ | GENERIC_WRITE, // 允許讀和寫

0, // 獨(dú)占方式

NULL,

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

FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, // 重疊方式

NULL

);

if(hCom = = INVALID_HANDLE_VALUE)

{

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

}

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

BOOL SetupComm(

HANDLE hFile, // 通信設(shè)備句柄

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

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

);

SetupComm()函數(shù)中各項(xiàng)含義說(shuō)明如下:

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

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

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

2. 關(guān)閉串口

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

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

BOOL CloseHandle(

HANDLE hObject // 需關(guān)閉的設(shè)備句柄

);

使用串口時(shí)一般要關(guān)閉它,如果忘記關(guān)閉串口,串口就會(huì)始終處于打開(kāi)狀態(tài),其它應(yīng)用程序就不能打開(kāi)并使用串口了。

附上出處鏈接:

如何關(guān)閉linux系統(tǒng)的虛擬機(jī)的命令行

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

/etc/inputrc找到set

bell-style

none

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

visible,

audible,

vi

/etc/inputrc中的set

bell-style

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

-blength

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

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

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

Linux怎么把串口設(shè)置

簡(jiǎn)單的運(yùn)行 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 是一個(gè)程序用于設(shè)定并/或報(bào)告某個(gè)串口關(guān)聯(lián)的配置信息。該信息包括串口用到的I/O 端口和中斷號(hào),以及Break鍵是否應(yīng)被解釋為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選項(xiàng)的setserial幫助找到你的Linux板子上的物理串口。

Linux 串口控制臺(tái)程序

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

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

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

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

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

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

應(yīng)該是沒(méi)有這樣的辦法的。

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

你應(yīng)該換一個(gè)思路來(lái)解決你的問(wèn)題。比如除了你的程序,沒(méi)有其他程序運(yùn)行在這臺(tái)電腦上,沒(méi)有其他用戶有權(quán)訪問(wèn)這臺(tái)電腦,不就解決了嗎?

Linux串口相關(guān)的操作及綁定

@ toc

可在控制臺(tái)輸入

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

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

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

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

一般情況下串口的名稱全部在dev下面,如果你沒(méi)有外插串口卡的話默認(rèn)是dev下的ttyS* ,一般ttyS0對(duì)應(yīng)com1,ttyS1對(duì)應(yīng)com2,當(dāng)然也不一定是必然的;

如果有ttyS設(shè)備,再看/dev/有沒(méi)有ttyS*,如沒(méi)有就建立一個(gè):

如果板子的設(shè)備中沒(méi)有標(biāo)準(zhǔn)串口設(shè)備ttyS0,也沒(méi)有ttySAC0。/dev下應(yīng)該有一個(gè)USB串口:/dev/ttyUSB0.

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

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

可能是linux下的串口設(shè)備沒(méi)有打開(kāi),需要改變串口設(shè)備

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

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

該條命令會(huì)將 ttyUSB0所對(duì)應(yīng)的硬件端口的kernel設(shè)備名 顯現(xiàn)出來(lái), 得到KERNEL== '1-5.5.4', 而不是之前的ttyUSB0

cmd.sh如下:

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

getUSB.py:

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

方式一

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

方式二

我的硬件序列號(hào):ATTRS{serial}=="FTSYWCXZ"這個(gè)號(hào)是唯一的

可以通過(guò)/dev/usb_0打開(kāi)串口設(shè)備

常用的匹配類型:

當(dāng)前文章:linux關(guān)閉串口命令行 關(guān)閉linux端口命令
網(wǎng)頁(yè)地址:http://jinyejixie.com/article38/doscdpp.html

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

廣告

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

綿陽(yáng)服務(wù)器托管
忻城县| 防城港市| 崇礼县| 保德县| 甘孜县| 宁城县| 如东县| 老河口市| 小金县| 呈贡县| 托里县| 噶尔县| 镇安县| 茌平县| 泉州市| 秦皇岛市| 务川| 菏泽市| 顺义区| 永福县| 张家港市| 霍林郭勒市| 怀仁县| 芒康县| 宜丰县| 邻水| 凉山| 安阳县| 霍城县| 永定县| 巫溪县| 香格里拉县| 安丘市| 定安县| 富源县| 扶风县| 合水县| 两当县| 武威市| 和平县| 鄂州市|