linux關閉串口命令 關閉linux端口命令
linux中有沒有替代windows串口編程中SetCommBreak()與ClearCommBreak()?
(一)Windows API串口通信編程概述
專注于為中小企業提供成都做網站、成都網站建設服務,電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業澗西免費做網站提供優質的服務。我們立足成都,凝聚了一批互聯網行業人才,有力地推動了千余家企業的穩健成長,幫助中小企業通過網站建設實現規模擴充和轉變。
Windows環境下的串口編程與DOS環境下的串口編程有很大不同。Windows環境下的編程的最大特征之一就是設備無關性,它通過設備驅動程序將Windows應用程序同不同的外部設備隔離。Windows封裝了Windows的通信機制,這種方式稱為通信API,Windows程序可以利用Windows通信API進行編程,不用對硬件直接進行操作。這種體系被稱為Windows開放式服務體系(WOSA,Windows Open Services Architectures)。
早期的Windows3.x與Windows 9x/NT/2000的通信API有很大不同,在16位的串行通信程序中,一般使用16位的Windows API通信函數。為使大家對串口通信有一全面的理解,下面簡單介紹一下16位的Windows API通信函數:
(1) 打開和關閉串口
OpenComm()打開串口資源,并指定輸入、輸出緩沖區的大小(以字節計);
CloseComm()關閉串口;
例:
int idComDev;
idComdev=OpenComm(“COM1”,1024,512);
CloseComm(idComDev);
(2) 初始化串口
BuildCommDCB()、setCommState()填寫設備控制塊DCB,然后對已打開的串口進行參數配置,例:
DCB dcb;
BuildCommDCB(〝COM1:2400,n,8,1〞,dcb);
SetCommState(dcb);
(3) 對串口進行讀寫
ReadComm、WriteComm()對串口進行讀寫操作,即數據的接收和發送。例:
char *m_pReceive; int count;
ReadComm(idComDev,m_pReceive,count);
Char wr[30]; int count2;
WriteComm(idComDev,wr,count2);
通過對以上的描述我們可以看出,16位以下的串口通信程序最大的特點就在于串口等外部設備的操作有自己特有的API函數。
Windows 9x/NT/2000中的API一般都支持32位的操作,因此又稱為Win32API。為了在上述系統中實現串行數據傳送,可以使用Win32通信API。Win32通信API基本上是一個串行端口API,不是很適合于局域網(LAN)通信。雖然在線路上發送數據之前,LAN通常將數據位串行化,這和窗口或調制解調器發送數據之前所作的工作一模一樣,但局域網使用的線路的位數通常比串口少,而且還使用與串口協議很少有類似之處的訪問、路由、安全性和糾錯協議。局域網通信所需要的協議層使得Win32通信API對于這些應用來說很不理想。因此,在網絡通信和連接方面,TCP/IP協議要比Win32通信API更適合一些。
Windows操作系統是一個可搶占式的操作系統,所以Windows應用程序常常有被別的程序搶占時間片的可能,因此Win32通信API也不能用于實時通信。實時通信的質量與時間密切相關。例如,數字化音頻數據是實時數據,因為話音的質量依賴于播放它的速率。在錄制音頻時,它就以某個速度被數字化了,該速度就是人們所熟知的采樣速率。聲音必須以相同的采樣率重放,否則聽起來就會太慢或太快。實際中的視頻播放,也不是實時播放,那僅僅是存放在緩沖中的那部分數據。因此,不需要許多協議層的交互式、非實時的通信可以采用Win32通信API來實現。Win32通信API把串口操作(以及并口等)和文件操作統一起來了,使用類似的操作來實現。
(二) Windows串口通信相關API函數
“工欲善其事,必先利其器”,這一節將從使用的角度出發,對和串口通信相關的32位的Windows API函數進行介紹,力圖使你們對其有個全面、準確的認識。
2.1 打開和關閉串口
1. 打開串口
在32位的Windows系統中,串口和其它通信設備是作為文件處理的。串口的打開、關閉、讀取和寫入所用的函數與操作文件的函數完全一致。
通信會話以調用CreateFile()開始。CreateFile()為讀訪問、寫訪問或讀寫訪問“打開”串口。按照Windows的通常做法,CreateFile()返回一個句柄,隨后在打開的端口的操作中使用CreateFile()函數非常復雜,復雜性的原因之一是它是通用的。可以使用CreateFile打開已存在的文件,創建新文件和打開根本就不是文件的設備,例如串口、并口和調制解調器。CreateFile()函數聲明如下:
HANDLE CreateFile(
LPCTSTR lpszName,
DWORD fdwAccess,
DWORD fdwShareMode,
LPSECURITY_ATTRIBUTES lpsa,
DWORD fdwCreate,
DWORD fdwAttrsAndFlags,
HANDLE hTemplateFile
)
CreateFile函數中的參數解釋如下:
·lpszName:指定要打開的串口邏輯名,用字符串表示,如“COM1”和“COM2”分別表示串口1和串口2。
·fdwAccess:用來指定串口訪問的類型。與文件一樣,串口也是可以被打開以供讀取、寫入或者兩者兼有。
GENERIC_READ位讀取訪問打開端口,GENERIC_READ位寫訪問打開端口。這兩個常數定義如下:
const GENERIC_READ = 0x80000000h;
const GENERIC_WRITE = 0x40000000h;
用戶可以用邏輯操作將這兩個標識符連接起來,為讀/寫訪問權限打開端口。因為大部分串口通信都是雙向的,因此常常在設置中將兩個標識符連接起來使用。如:
fdwAccess = GENERIC_READ | GENERIC_WRITE;
·fdwShareMode:指定該端口的共享屬性。該參數是為那些由許多應用程序共享的文件提供的。對于不能共享的串口,它必須設置為0。這就是文件與通信設備之間的主要差異之一。如果在當前的應用程序調用CreateFile()時,另一個應用程序已經打開了串口,該函數就會返回錯誤代碼,原因是兩個應用程序不能共享一個端口。然而,同一個應用程序的多個線程可以共享由CreateFile()返回的端口句柄,并且根據安全性屬性設置,該句柄可以被打開端口的應用程序的子程序所繼承。
·Ipsa:引用安全性屬性結構(SECURITY_ARRTIBUTES),該結構定義了一些屬性,例如通信句柄如何被打開端口的應用程序的子程序所繼承。將該參數設置為NULL將為該端口分配缺省的安全性屬性。子應用程序所繼承的缺省屬性是該端口不能被繼承的。
安全屬性結構SECURITY_ARRTIBUTES結構聲明如下:
typedef struct_SECURITY_ARRTIBUTE {
DWORD nLength;
LPVOID lpSecurityDescriptor;
BOOL bInheritHandle;
} SECURITY_ARRTIBUTE;
SECURITY_ARRTIBUTES結構成員nLength指明該結構的長度,lpSecurityDescriptor指向一個安全描述字符,bInheritHandle表明句柄是否能被繼承。
·fdwCreate:指定如果CreateFile()正在被已有的文件調用時應采取的動作。因為串口總是存在,fdwCreate必須設置成OPEN_EXISTING。該標志告訴Windows不用企圖創建新端口,而是打開已經存在的端口。OPEN_EXISTING常數定義為:
const OPEN_EXISTING = 3;
·fdwAttrsAndFlags:描述了端口的各種屬性。對于文件來說,有可能具有很多屬性,但對于串口,唯一有意義的設置是FILE_FLAG_OVERLAPPED。當創建時指定該設置,端口I/O可以在后臺進行(后臺I/O也叫異步I/O)。FILE_FLAG_OVERLAPPED常數定義如下:
const FILE_FLAG_OVERLAPPED = 0x40000000h
·hTemplateFile:指向模板文件的句柄,當端口處于打開狀態時,不使用該參數,因而必須置成0。
調用CreateFile()函數打開COM1串口操作的例子如下所示:
HANDLE hCom;
DWORD dwError;
hCom=CreateFile(“COM1”, // 文件名
GENERIC_READ | GENERIC_WRITE, // 允許讀和寫
0, // 獨占方式
NULL,
OPEN_EXISTING, // 打開而不是創建
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, // 重疊方式
NULL
);
if(hCom = = INVALID_HANDLE_VALUE)
{
dwError=GetLastError(); // 處理錯誤
}
一旦端口處于打開狀態,就可以分配一個發送緩沖區和接收緩沖區,并且通過調用SetupComm()實現其它初始化工作。也可以不調用SetupComm()函數,Windows系統也會分配缺省的發送和接收緩沖區,并且初始化端口。但為了保證緩沖區的大小與實際需要的一致,最好還是調用該函數。SetupComm()函數聲明如下:
BOOL SetupComm(
HANDLE hFile, // 通信設備句柄
DWORD dwInQueue, // 輸入緩沖區大小
DWORD dwOutQueue // 輸出緩沖區大小
);
SetupComm()函數中各項含義說明如下:
·hFile: 由GreatFile()返回的指向已打開端口的句柄。
·dwInQueue和dwOutQueue: 接收緩沖區的大小和發送緩沖區的大小。這兩個定義并非是實際的緩沖區的大小,指定的大小僅僅是“推薦的”大小,而Windows可以隨意分配任意大小的緩沖區。Windows設備驅動程序可以獲得這兩個數據,并不直接分配大小,而使用來優化性能和避免緩沖區超限。
注意:當使用CreateFile()函數打開串口時:為實現調制解調器的排他性訪問,共享標識必須設為零;創建標識必須設為OPEN_EXISTING;模板句柄必須置為空。
2. 關閉串口
關閉串口比打開串口簡單得多,只需要調用CloseHandle()函數關閉由CreateHandle()函數返回得句柄即可。
CloseHandle函數聲明如下:
BOOL CloseHandle(
HANDLE hObject // 需關閉的設備句柄
);
使用串口時一般要關閉它,如果忘記關閉串口,串口就會始終處于打開狀態,其它應用程序就不能打開并使用串口了。
附上出處鏈接:
我想關閉LINUX系統上的某個端口,請問相關命令是什么?詳細一點的,謝謝。
前提:首先你必須知道,端口不是獨立存在的,它是依附于進程的。某個進程開啟,那么它對應的端口就開啟了,進程關閉,則該端口也就關閉了。下次若某個進程再次開啟,則相應的端口也再次開啟。而不要純粹的理解為關閉掉某個端口,不過可以禁用某個端口。
1. 可以通過"~$ netstat -anp" 來查看哪些端口被打開。
(注:加參數'-n'會將應用程序轉為端口顯示,即數字格式的地址,如:nfs-2049, ftp-21,因此可以開啟兩個終端,一一對應一下程序所對應的端口號)
2. 然后可以通過"~$ lsof -i:$PORT"查看應用該端口的程序($PORT指對應的端口號)。或者你也可以查看文件/etc/services,從里面可以找出端口所對應的服務。
(注:有些端口通過netstat查不出來,更可靠的方法是"~$ sudo nmap -sT -O localhost")
3. 若要關閉某個端口,則可以:
1)通過iptables工具將該端口禁掉,如:
"~$ sudo iptables -A INPUT -p tcp --dport $PORT -j DROP"
"~$ sudo iptables -A OUTPUT -p tcp --dport $PORT -j DROP"
2)或者關掉對應的應用程序,則端口就自然關閉了,如:
"~$ kill -9 PID" (PID:進程號)
如: 通過"~$ netstat -anp | grep ssh"
有顯示: tcp 0 127.0.0.1:2121 0.0.0.0:* LISTEN 7546/ssh
則: "~$ kill -9 7546"
(可通過"~$ chkconfig"查看系統服務的開啟狀態)
本文來自CSDN博客,轉載請標明出處:
linux關閉tty的命令式什么啊?
根據發行版不同有區別,以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怎么把串口設置
簡單的運行 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 是一個程序用于設定并/或報告某個串口關聯的配置信息。該信息包括串口用到的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 - 一個內建智能PPP 撥號器。
getty / agetty - agetty 打開一個 tty 端口, 提示登錄名稱并調用 /bin/login 命令。
grub / lilo configuration - 配置串口為系統控制臺。
本文標題:linux關閉串口命令 關閉linux端口命令
轉載來于:http://www.xueling.net.cn/article/ddshosc.html