linux關(guān)閉串口命令 關(guān)閉linux端口命令
linux中有沒有替代windows串口編程中SetCommBreak()與ClearCommBreak()?
(一)Windows API串口通信編程概述
Windows環(huán)境下的串口編程與DOS環(huán)境下的串口編程有很大不同。Windows環(huán)境下的編程的最大特征之一就是設(shè)備無關(guān)性,它通過設(shè)備驅(qū)動(dòng)程序?qū)indows應(yīng)用程序同不同的外部設(shè)備隔離。Windows封裝了Windows的通信機(jī)制,這種方式稱為通信API,Windows程序可以利用Windows通信API進(jìn)行編程,不用對(duì)硬件直接進(jìn)行操作。這種體系被稱為Windows開放式服務(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) 打開和關(guān)閉串口
OpenComm()打開串口資源,并指定輸入、輸出緩沖區(qū)的大小(以字節(jié)計(jì));
CloseComm()關(guān)閉串口;
例:
int idComDev;
idComdev=OpenComm(“COM1”,1024,512);
CloseComm(idComDev);
(2) 初始化串口
BuildCommDCB()、setCommState()填寫設(shè)備控制塊DCB,然后對(duì)已打開的串口進(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);
通過對(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é)議很少有類似之處的訪問、路由、安全性和糾錯(cuò)協(xié)議。局域網(wǎng)通信所需要的協(xié)議層使得Win32通信API對(duì)于這些應(yīng)用來說很不理想。因此,在網(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ù)字化了,該速度就是人們所熟知的采樣速率。聲音必須以相同的采樣率重放,否則聽起來就會(huì)太慢或太快。實(shí)際中的視頻 ,也不是實(shí)時(shí) ,那僅僅是存放在緩沖中的那部分?jǐn)?shù)據(jù)。因此,不需要許多協(xié)議層的交互式、非實(shí)時(shí)的通信可以采用Win32通信API來實(shí)現(xiàn)。Win32通信API把串口操作(以及并口等)和文件操作統(tǒng)一起來了,使用類似的操作來實(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 打開和關(guān)閉串口
1. 打開串口
在32位的Windows系統(tǒng)中,串口和其它通信設(shè)備是作為文件處理的。串口的打開、關(guān)閉、讀取和寫入所用的函數(shù)與操作文件的函數(shù)完全一致。
通信會(huì)話以調(diào)用CreateFile()開始。CreateFile()為讀訪問、寫訪問或讀寫訪問“打開”串口。按照Windows的通常做法,CreateFile()返回一個(gè)句柄,隨后在打開的端口的操作中使用CreateFile()函數(shù)非常復(fù)雜,復(fù)雜性的原因之一是它是通用的。可以使用CreateFile打開已存在的文件,創(chuàng)建新文件和打開根本就不是文件的設(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:指定要打開的串口邏輯名,用字符串表示,如“COM1”和“COM2”分別表示串口1和串口2。
·fdwAccess:用來指定串口訪問的類型。與文件一樣,串口也是可以被打開以供讀取、寫入或者兩者兼有。
GENERIC_READ位讀取訪問打開端口,GENERIC_READ位寫訪問打開端口。這兩個(gè)常數(shù)定義如下:
const GENERIC_READ = 0x80000000h;
const GENERIC_WRITE = 0x40000000h;
用戶可以用邏輯操作將這兩個(gè)標(biāo)識(shí)符連接起來,為讀/寫訪問權(quán)限打開端口。因?yàn)榇蟛糠执谕ㄐ哦际请p向的,因此常常在設(shè)置中將兩個(gè)標(biāo)識(shí)符連接起來使用。如:
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)打開了串口,該函數(shù)就會(huì)返回錯(cuò)誤代碼,原因是兩個(gè)應(yīng)用程序不能共享一個(gè)端口。然而,同一個(gè)應(yīng)用程序的多個(gè)線程可以共享由CreateFile()返回的端口句柄,并且根據(jù)安全性屬性設(shè)置,該句柄可以被打開端口的應(yīng)用程序的子程序所繼承。
·Ipsa:引用安全性屬性結(jié)構(gòu)(SECURITY_ARRTIBUTES),該結(jié)構(gòu)定義了一些屬性,例如通信句柄如何被打開端口的應(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)榇诳偸谴嬖冢琭dwCreate必須設(shè)置成OPEN_EXISTING。該標(biāo)志告訴Windows不用企圖創(chuàng)建新端口,而是打開已經(jīng)存在的端口。OPEN_EXISTING常數(shù)定義為:
const OPEN_EXISTING = 3;
·fdwAttrsAndFlags:描述了端口的各種屬性。對(duì)于文件來說,有可能具有很多屬性,但對(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)端口處于打開狀態(tài)時(shí),不使用該參數(shù),因而必須置成0。
調(diào)用CreateFile()函數(shù)打開COM1串口操作的例子如下所示:
HANDLE hCom;
DWORD dwError;
hCom=CreateFile(“COM1”, // 文件名
GENERIC_READ | GENERIC_WRITE, // 允許讀和寫
0, // 獨(dú)占方式
NULL,
OPEN_EXISTING, // 打開而不是創(chuàng)建
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, // 重疊方式
NULL
);
if(hCom = = INVALID_HANDLE_VALUE)
{
dwError=GetLastError(); // 處理錯(cuò)誤
}
一旦端口處于打開狀態(tài),就可以分配一個(gè)發(fā)送緩沖區(qū)和接收緩沖區(qū),并且通過調(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)含義說明如下:
·hFile: 由GreatFile()返回的指向已打開端口的句柄。
·dwInQueue和dwOutQueue: 接收緩沖區(qū)的大小和發(fā)送緩沖區(qū)的大小。這兩個(gè)定義并非是實(shí)際的緩沖區(qū)的大小,指定的大小僅僅是“推薦的”大小,而Windows可以隨意分配任意大小的緩沖區(qū)。Windows設(shè)備驅(qū)動(dòng)程序可以獲得這兩個(gè)數(shù)據(jù),并不直接分配大小,而使用來優(yōu)化性能和避免緩沖區(qū)超限。
注意:當(dāng)使用CreateFile()函數(shù)打開串口時(shí):為實(shí)現(xiàn)調(diào)制解調(diào)器的排他性訪問,共享標(biāo)識(shí)必須設(shè)為零;創(chuàng)建標(biāo)識(shí)必須設(shè)為OPEN_EXISTING;模板句柄必須置為空。
2. 關(guān)閉串口
關(guān)閉串口比打開串口簡(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ì)始終處于打開狀態(tài),其它應(yīng)用程序就不能打開并使用串口了。
附上出處鏈接:
我想關(guān)閉LINUX系統(tǒng)上的某個(gè)端口,請(qǐng)問相關(guān)命令是什么?詳細(xì)一點(diǎn)的,謝謝。
前提:首先你必須知道,端口不是獨(dú)立存在的,它是依附于進(jìn)程的。某個(gè)進(jìn)程開啟,那么它對(duì)應(yīng)的端口就開啟了,進(jìn)程關(guān)閉,則該端口也就關(guān)閉了。下次若某個(gè)進(jìn)程再次開啟,則相應(yīng)的端口也再次開啟。而不要純粹的理解為關(guān)閉掉某個(gè)端口,不過可以禁用某個(gè)端口。
1. 可以通過"~$ netstat -anp" 來查看哪些端口被打開。
(注:加參數(shù)'-n'會(huì)將應(yīng)用程序轉(zhuǎn)為端口顯示,即數(shù)字格式的地址,如:nfs-2049, ftp-21,因此可以開啟兩個(gè)終端,一一對(duì)應(yīng)一下程序所對(duì)應(yīng)的端口號(hào))
2. 然后可以通過"~$ lsof -i:$PORT"查看應(yīng)用該端口的程序($PORT指對(duì)應(yīng)的端口號(hào))?;蛘吣阋部梢圆榭次募?etc/services,從里面可以找出端口所對(duì)應(yīng)的服務(wù)。
(注:有些端口通過netstat查不出來,更可靠的方法是"~$ sudo nmap -sT -O localhost")
3. 若要關(guān)閉某個(gè)端口,則可以:
1)通過iptables工具將該端口禁掉,如:
"~$ sudo iptables -A INPUT -p tcp --dport $PORT -j DROP"
"~$ sudo iptables -A OUTPUT -p tcp --dport $PORT -j DROP"
2)或者關(guān)掉對(duì)應(yīng)的應(yīng)用程序,則端口就自然關(guān)閉了,如:
"~$ kill -9 PID" (PID:進(jìn)程號(hào))
如: 通過"~$ netstat -anp | grep ssh"
有顯示: tcp 0 127.0.0.1:2121 0.0.0.0:* LISTEN 7546/ssh
則: "~$ kill -9 7546"
(可通過"~$ chkconfig"查看系統(tǒng)服務(wù)的開啟狀態(tài))
本文來自CSDN博客,轉(zhuǎn)載請(qǐng)標(biāo)明出處:
linux關(guān)閉tty的命令式什么?。?/h2>
根據(jù)發(fā)行版不同有區(qū)別,以Redhat和CentOS為例:
5以前的老版本修改/etc/inittab,注釋掉:
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6
5及以后的新版本修改/etc/init/start-ttys.conf,找到:
ACTIVE_CONSOLES=/dev/tty[1-6]
修改為:ACTIVE_CONSOLES=/dev/tty1
再修改/etc/sysconfig/init
找到:
ACTIVE_CONSOLES=/dev/tty[1-6]
修改為:ACTIVE_CONSOLES=/dev/tty1
重啟生效。
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)程序
一旦串口被確定了,你就能使用許多的工具來配置Linux板子:
minicom- 用于控制modem和連接到dump 設(shè)備的最好的串口通信程序。
wvidial or other GUI dial up networking program - 一個(gè)內(nèi)建智能PPP 撥號(hào)器。
getty / agetty - agetty 打開一個(gè) tty 端口, 提示登錄名稱并調(diào)用 /bin/login 命令。
grub / lilo configuration - 配置串口為系統(tǒng)控制臺(tái)。
上一篇:linux文件命令重命名 linux重命名文件名命令
欄 目:Linux/apache
下一篇:沒有了
本文標(biāo)題:linux關(guān)閉串口命令 關(guān)閉linux端口命令
本文地址:http://mengdiqiu.com.cn/a1/Linux_apache/17208.html
您可能感興趣的文章
- 04-02linux文件命令重命名 linux重命名文件名命令
- 04-02linux命令注入過濾 linux 代碼注入
- 04-02linux中jobs命令 shell jobs命令
- 04-02linux依次執(zhí)行命令 linux命令的執(zhí)行過程是怎樣的?新手必讀
- 04-02linux命令免輸入 linux配置免密登錄
- 04-02linux命令注銷vnc linux命令行注銷用戶
- 04-02軟交換linux命令 軟交換網(wǎng)絡(luò)主要協(xié)議有哪些
- 04-02linux命令歷史記錄 linux查看歷史記錄的操作命令
- 04-02linux命令頁面 linux命令頁面中文
- 01-10Linux中g(shù)rep和egrep命令詳解


閱讀排行
- 1C語言 while語句的用法詳解
- 2java 實(shí)現(xiàn)簡(jiǎn)單圣誕樹的示例代碼(圣誕
- 3利用C語言實(shí)現(xiàn)“百馬百擔(dān)”問題方法
- 4C語言中計(jì)算正弦的相關(guān)函數(shù)總結(jié)
- 5c語言計(jì)算三角形面積代碼
- 6什么是 WSH(腳本宿主)的詳細(xì)解釋
- 7C++ 中隨機(jī)函數(shù)random函數(shù)的使用方法
- 8正則表達(dá)式匹配各種特殊字符
- 9C語言十進(jìn)制轉(zhuǎn)二進(jìn)制代碼實(shí)例
- 10C語言查找數(shù)組里數(shù)字重復(fù)次數(shù)的方法
本欄相關(guān)
- 04-02linux關(guān)閉串口命令 關(guān)閉linux端口命令
- 04-02linux文件命令重命名 linux重命名文件名
- 04-02linux中jobs命令 shell jobs命令
- 04-02linux命令注入過濾 linux 代碼注入
- 04-02linux依次執(zhí)行命令 linux命令的執(zhí)行過程
- 04-02linux命令注銷vnc linux命令行注銷用戶
- 04-02linux命令免輸入 linux配置免密登錄
- 04-02軟交換linux命令 軟交換網(wǎng)絡(luò)主要協(xié)議
- 04-02linux命令歷史記錄 linux查看歷史記錄的
- 04-02linux命令頁面 linux命令頁面中文
隨機(jī)閱讀
- 08-05DEDE織夢(mèng)data目錄下的sessions文件夾有什
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 01-11ajax實(shí)現(xiàn)頁面的局部加載
- 08-05dedecms(織夢(mèng))副欄目數(shù)量限制代碼修改
- 01-10delphi制作wav文件的方法
- 01-10C#中split用法實(shí)例總結(jié)
- 01-10使用C語言求解撲克牌的順子及n個(gè)骰子
- 08-05織夢(mèng)dedecms什么時(shí)候用欄目交叉功能?
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 04-02jquery與jsp,用jquery