新聞中心
Linux作為一種優(yōu)秀的開源操作系統(tǒng),擁有許多優(yōu)秀的開發(fā)資源。但是在進行開發(fā)操作中,大家也許會遇到類似于 “Linux 缺少 io.h” 的問題。這個問題一般出現(xiàn)在Linux內(nèi)核或驅(qū)動程序的開發(fā)過程中,可能會導致無法正常使用硬件設(shè)備或無法完成設(shè)備的數(shù)據(jù)交換等問題。所以,本篇文章將會介紹在出現(xiàn)Linux缺少io.h問題時的解決方案。

成都創(chuàng)新互聯(lián)長期為上千余家客戶提供的網(wǎng)站建設(shè)服務,團隊從業(yè)經(jīng)驗10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務;打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為高安企業(yè)提供專業(yè)的網(wǎng)站設(shè)計、成都網(wǎng)站制作,高安網(wǎng)站改版等技術(shù)服務。擁有10年豐富建站經(jīng)驗和眾多成功案例,為您定制開發(fā)。
一、什么是io.h
在講解解決方案之前,需要先簡單介紹一下io.h。io.h中的IO操作是指對設(shè)備文件進行直接控制的操作,例如對端口進行讀寫、對顯存進行控制和對中斷向量表進行設(shè)置等。在Linux下,io.h文件中包含了很多的宏定義和函數(shù)聲明,用以實現(xiàn)對硬件設(shè)備的控制,可以說是Linux下開發(fā)驅(qū)動程序或內(nèi)核時非常重要的頭文件。
二、為什么會缺少io.h
Linux的內(nèi)核和驅(qū)動程序一般都是由C語言編寫而成的,而io.h是C語言中的頭文件,因此在Linux開發(fā)過程中,通常需要包含該頭文件,才能進行設(shè)備文件的IO操作。但是在實際的開發(fā)過程中,有時候會出現(xiàn)缺少io.h的情況。一般而言,這種情況可能有以下幾種原因:
1. 編譯器的版本較低,沒有包含io.h文件;
2. Linux操作系統(tǒng)版本不同,導致io.h不同;
3. 沒有正確把io.h文件所在的路徑添加到頭文件搜索路徑中。
無論哪種原因,缺失io.h都會導致在開發(fā)驅(qū)動程序或內(nèi)核時無法進行設(shè)備的IO操作。
三、io.h文件的引用
針對Linux缺少io.h的問題,最基本的方式就是提供io.h文件。但是很多時候找到io.h文件并不容易,可能是因為io.h文件在舊的Linux版本中已經(jīng)被廢棄,或者是在當前的Linux版本中沒有默認提供io.h文件。因此,下面將會介紹三種引用io.h文件的方式。
1. 從Linux源代碼中獲取
在使用Linux的過程中,我們需要的io.h文件基本上都存在于內(nèi)核或者驅(qū)動源代碼中。我們可以從Linux的源代碼中找到對應的io.h文件,并且根據(jù)自己的需要進行不同版本的選擇。當然,如果你對Linux的內(nèi)核或驅(qū)動程序不熟悉或不想重新編譯內(nèi)核的話,這種方式可能不是更優(yōu)的方案。
2. 從在線資源庫中獲取
Linux是一個開源的平臺,像 GitHub、GitLab、Packagecloud等等這些資源庫通常都可以找到我們需要的io.h文件。我們可以直接搜索出相關(guān)的文件,進行下載和引用。在這種方式下,我們需要慎重選擇的是獲取資源的可靠性以及io.h文件的版本,盡量選擇與自己平臺相符合的版本。
3. 從本地搜索目錄中獲取
如果只是找不到io.h文件,最簡單的處理方式就是把io.h頭文件所在的目錄添加到搜索路徑之中。根據(jù)自己的環(huán)境,通常需要在CFLAGS環(huán)境變量中添加路徑,具體方式如下:
“`
export CFLAGS=”$CFLAGS -I/path/to/io.h”
“`
四、
在Linux開發(fā)過程中,若出現(xiàn)缺少io.h文件的問題,需要及時尋找好的解決方案。通常情況下,我們可以通過從Linux源代碼中獲取、從在線資源庫中獲取和從本地搜索目錄中獲取多種方式來引用io.h文件。但如何尋找好的方法和解決方案,還是要根據(jù)具體情況和環(huán)境來決定。在任何情況下,都需要多動手、多探索才能更好地掌握Linux操作系統(tǒng)的開發(fā)技巧。
相關(guān)問題拓展閱讀:
- arm-linux-gcc 安裝完成后,頭文件的包含路徑不正確,找不到stdio.h,如何修改?。?/li>
- 在linux系統(tǒng)中如何查看cpu和io
- 如何查看Linux下進程的IO活動狀況 Hey,Linux
arm-linux-gcc 安裝完成后,頭文件的包含路徑不正確,找不到stdio.h,如何修改?。?/h3>
要么你重新編譯 arm-linux-gcc,使用正確的配置。要么就在編譯的時候加 -I (大寫i)參數(shù)指定頭文件搜索路徑,比如
gcc -I/usr/local/arm/3.2/include a.c
在linux系統(tǒng)中如何查看cpu和io
在 Linux 系統(tǒng)中,可以使用以下命令查看 CPU 信息:
top: 顯示系統(tǒng)進程的實時狀態(tài)
htop: 與 top 類似,但提供了更多的信息和更好的可視化
mpstat: 顯示多核 CPU 的狀拍蘆態(tài)
lscpu: 顯示系統(tǒng) CPU 的配置信息
查看 IO 信息,可以使用以下命令:
iostat : 用于檢測磁盤I/O的使用狀況
vmstat : 用于檢測虛擬內(nèi)存的使用狀況
mpstat : 用于檢測 CPU 和磁盤I/O的使用狀況
dstat : 用于檢測磁盤I/O,網(wǎng)絡(luò),CPU等系統(tǒng)資源首磨的使用狀況
需襲芹帶要注意的是這些命令需要安裝對應的工具包
如何查看Linux下進程的IO活動狀況 Hey,Linux
前段時間,幾臺測試服務器的Web應用響應速度非常慢,系統(tǒng)負載也比較高,> 10, 但CPU和內(nèi)存卻很閑,于是懷疑是磁盤的性能瓶頸,通過vmstat和iostat看到IO的讀寫量非常大,尤其是用iostat -x 1命令可以很直觀的看到IO的使用率一直在100%。
但究竟是什么進程導致的高IO呢,由于每臺服務器上都有JBoss和MySQL的存在,JBoss會不停的產(chǎn)生很多小的數(shù)據(jù)文件和生成文本數(shù)據(jù)庫的數(shù)據(jù),而MySQL則會不停的從Master同步新的數(shù)據(jù)。因此我們懷疑是這兩個進程導致的高IO,通過停止了JBoss和MySQL之后,IO立刻降為0%. 但我們還是不能確定誰是主因,于是尋找可以查看特定進程IO的方法。
最后,找到了兩個方法可以查看進程IO的活動狀況。
1. 之一個方法是通過一個python腳本來實現(xiàn)。
方法是將以下內(nèi)容另存為一個叫io.py的腳本中,然后直接以root身份執(zhí)行腳本,就可以看到如下圖所示的信息(由于我們已經(jīng)通過升級到SSD硬盤解決了MySQL的IO問題,所以不能提供關(guān)于MySQL的截圖了),其中出現(xiàn)次數(shù)最多,數(shù)據(jù)更大的進程,就是導致高IO的主因。不過比較遺憾的是這個腳本并不能顯示進程在每一秒的準確的IO讀寫。
# vim io.py
# chmod +x io.py
# ./io.py
#!/usr/bin/python
# Monitoring per-process disk I/O activity
# written by
import sys, os, time, signal, re
class DiskIO:
def __init__(self, pname=None, pid=None, reads=0, writes=0):
self.pname = pname
self.pid = pid
self.reads = 0
self.writes = 0
def main():
argc = len(sys.argv)
if argc != 1:
print “usage: ./iotop”
sys.exit(0)
if os.getuid() != 0:
print “must be run as root”
sys.exit(0)
signal.signal(signal.SIGINT, signal_handler)
os.system(‘echo 1 > /proc/sys/vm/block_dump’)
print “TASKPIDREAD WRITE”
while True:
os.system(‘dmesg -c > /tmp/diskio.log’)
l =
f = open(‘/tmp/diskio.log’, ‘r’)
line = f.readline()
while line:
m = re.match(\
‘^(\S+)\((\d+)\): (READ|WRITE) block (\d+) on (\S+)’, line)
if m != None:
if not l:
l.append(DiskIO(m.group(1), m.group(2)))
line = f.readline()
continue
found = False
for item in l:
if item.pid == m.group(2):
found = True
if m.group(3) == “READ”:
item.reads = item.reads + 1
elif m.group(3) == “WRITE”:
item.writes = item.writes + 1
if not found:
l.append(DiskIO(m.group(1), m.group(2)))
line = f.readline()
time.sleep(1)
for item in l:
print “%-10s %10s %10d %10d” % \
(item.pname, item.pid, item.reads, item.writes)
def signal_handler(signal, frame):
os.system(‘echo 0 > /proc/sys/vm/block_dump’)
sys.exit(0)
if __name__==”__main__”:
main()
2. 另一個方法是將Linux的內(nèi)核升級到 >=2.6.20,然后安裝一個iotop軟件來實現(xiàn)。
不過這種改動并不適用于生產(chǎn)環(huán)境,因為在RHEL5.6和5.7上,內(nèi)核都在 2.6.20以下。但是它所顯示的結(jié)果是非常準確的,所以對于新上線的機器以及測試環(huán)境,非常值得一試,具體方法如下:
下載和升級新內(nèi)核(>=2.6.20),編譯時打開 TASK_DELAY_ACCT 和 TASK_IO_ACCOUNTING 選項。
解壓內(nèi)核后進入配置界面:
# wget
# tar jxvf linux-2.6.39.tar.gz
# mv linux-2.6.39 /usr/src/
# cd /usr/src/linux-2.6.39
# make oldconfig //使用make oldconfig可以繼承老的kernel的配置,為自己的配置省去很多麻煩。
# make menuconfig
把General setup – Enable per-task storage I/O accounting這個選項選上。
# vim .config
將#CONFIG_SYSFS_DEPRECATED_V2 is not set的注釋去掉的,將其改為y,即修改為CONFIG_SYSFS_DEPRECATED_V2=y。
保存內(nèi)核后編譯內(nèi)核:
# make
# make modules
# make modules_install
# make install
修改默認以新的內(nèi)核啟動:
# vi /boot/grub/grub.conf
default=0
將新的內(nèi)核配置文件復制到/boot目錄:
# cp /usr/src/linux-2.6.39/.config /boot/config-2.6.39
重啟服務器:
# reboot
# uname –r
2.6.39
重啟完成后確認內(nèi)核版本是否正確。
源碼安裝iotop所需的Python 2.7.2(>= 2.5):
# wget
# tar xzvf Python-2.7.2.tgz
# cd Python-2.7.2
# ./configure
# make; make install
下載并安裝iotop:
# wget
# tar -xjvf iotop-0.4.4.tar.bz2
# cd iotop-0.4.4
# python setup.py build
# python setup.py install
然后就可以使用iotop看到如下圖所示的信息:
linux 找不到io.h的介紹就聊到這里吧,感謝你花時間閱讀本站內(nèi)容,更多關(guān)于linux 找不到io.h,Linux 缺少 io.h 怎么辦?,arm-linux-gcc 安裝完成后,頭文件的包含路徑不正確,找不到stdio.h,如何修改???,在linux系統(tǒng)中如何查看cpu和io,如何查看Linux下進程的IO活動狀況 Hey,Linux的信息別忘了在本站進行查找喔。
成都服務器托管選創(chuàng)新互聯(lián),先上架開通再付費。
創(chuàng)新互聯(lián)(www.cdcxhl.com)專業(yè)-網(wǎng)站建設(shè),軟件開發(fā)老牌服務商!微信小程序開發(fā),APP開發(fā),網(wǎng)站制作,網(wǎng)站營銷推廣服務眾多企業(yè)。電話:028-86922220
網(wǎng)頁名稱:Linux 缺少 io.h 怎么辦? (linux 找不到io.h)
分享路徑:http://m.fisionsoft.com.cn/article/cdsdish.html


咨詢
建站咨詢
