新聞中心
在Linux上使用std C庫(kù),可以極大地提高程序的效率和可讀性。C庫(kù)作為L(zhǎng)inux操作系統(tǒng)的核心,包含了許多經(jīng)典的函數(shù),可以非常方便地實(shí)現(xiàn)各種操作。

成都創(chuàng)新互聯(lián)堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:網(wǎng)站設(shè)計(jì)、做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的丹寨網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
一、輸入輸出函數(shù)
輸入輸出函數(shù)是最常用的函數(shù)之一,可用于從控制臺(tái)讀取用戶輸入,以及將數(shù)據(jù)輸出到文件或控制臺(tái)。
1. printf函數(shù)
printf函數(shù)是C庫(kù)中最常用的輸出函數(shù)之一,可以將指定的數(shù)據(jù)按照指定的格式輸出到控制臺(tái)或文件中。例如:
printf(“Hello World!”);
該代碼將在控制臺(tái)上輸出Hello World!。除了輸出字符串之外,printf還可以輸出其他類型的數(shù)據(jù),如整型、浮點(diǎn)型、字符型等。
2. scanf函數(shù)
scanf函數(shù)可以從控制臺(tái)中讀取用戶輸入的數(shù)據(jù),并將其保存到指定的變量中。例如:
int num;
scanf(“%d”, &num);
該代碼將從控制臺(tái)讀取一個(gè)整數(shù),并將其保存到變量num中。
3. 文件操作函數(shù)
C庫(kù)中還包含許多文件操作函數(shù),如fopen、fclose、fread、fwrite等。這些函數(shù)可以實(shí)現(xiàn)對(duì)文件的讀寫(xiě)操作。
例如,以下代碼可以在控制臺(tái)上打開(kāi)文件并向其中寫(xiě)入數(shù)據(jù):
FILE *fp;
fp = fopen(“data.txt”, “w”);
fprintf(fp, “Hello World!”);
fclose(fp);
其中,fopen函數(shù)用于打開(kāi)文件,之一個(gè)參數(shù)是文件名,第二個(gè)參數(shù)是打開(kāi)方式(w表示寫(xiě)入模式)。fprintf函數(shù)用于將數(shù)據(jù)寫(xiě)入文件中,關(guān)閉文件時(shí)需要調(diào)用fclose函數(shù)。
二、字符串操作函數(shù)
C庫(kù)中包含了許多操作字符串的函數(shù),如strcpy、strcat、strlen等。這些函數(shù)可以大大簡(jiǎn)化代碼,提升效率。
1. strcpy函數(shù)
strcpy函數(shù)可以將一個(gè)字符串復(fù)制到另一個(gè)字符串中。例如:
char str1[] = “Hello World!”;
char str2[20];
strcpy(str2, str1);
該代碼將字符串str1復(fù)制到str2中。需要注意的是,str2的大小必須足夠大,以容納str1中的所有字符。
2. strcat函數(shù)
strcat函數(shù)可以將一個(gè)字符串連接到另一個(gè)字符串的末尾。例如:
char str1[] = “Hello”;
char str2[] = “World”;
strcat(str1, str2);
該代碼將字符串str2連接到字符串str1的末尾,最終結(jié)果為字符串”HelloWorld”。
3. strlen函數(shù)
strlen函數(shù)可以獲取一個(gè)字符串的長(zhǎng)度(即字符個(gè)數(shù))。例如:
char str[] = “Hello World!”;
int len = strlen(str);
該代碼將獲取字符串str的長(zhǎng)度,并將其保存到變量len中。strlen函數(shù)不會(huì)計(jì)算字符串最后的空字符(’\0’)。
三、動(dòng)態(tài)內(nèi)存分配函數(shù)
動(dòng)態(tài)內(nèi)存分配函數(shù)是C庫(kù)中非常重要的函數(shù)之一,可用于在運(yùn)行時(shí)動(dòng)態(tài)分配內(nèi)存。
1. malloc函數(shù)
malloc函數(shù)可以在運(yùn)行時(shí)動(dòng)態(tài)分配指定大小的內(nèi)存,返回的指針可以用于訪問(wèn)這塊內(nèi)存。例如:
int *p;
p = (int *)malloc(sizeof(int));
該代碼將動(dòng)態(tài)分配一個(gè)整數(shù)大小的內(nèi)存,并將起始地址保存在指針p中。
2. free函數(shù)
free函數(shù)可以釋放動(dòng)態(tài)分配的內(nèi)存,讓其成為可用內(nèi)存池的一部分。例如:
free(p);
該代碼將釋放指針p所指向的內(nèi)存。
四、其他常用函數(shù)
C庫(kù)中還包含了許多其他常用函數(shù),如atoi、atof、exit等。
1. atoi函數(shù)
atoi函數(shù)可以將一個(gè)字符串轉(zhuǎn)換為整型數(shù)據(jù)。例如:
char str[] = “123”;
int num = atoi(str);
該代碼將字符串”123″轉(zhuǎn)換為整型數(shù)據(jù),并將其保存在變量num中。
2. atof函數(shù)
atof函數(shù)可以將一個(gè)字符串轉(zhuǎn)換為浮點(diǎn)型數(shù)據(jù)。例如:
char str[] = “3.14”;
float num = atof(str);
該代碼將字符串”3.14″轉(zhuǎn)換為浮點(diǎn)型數(shù)據(jù),并將其保存在變量num中。
3. exit函數(shù)
exit函數(shù)可以終止當(dāng)前程序的執(zhí)行。例如:
exit(0);
該代碼將使程序退出,并返回值0。
綜上所述,在Linux上使用std C庫(kù),可以方便地實(shí)現(xiàn)各種操作,提高程序的效率和可讀性。值得注意的是,C庫(kù)中的函數(shù)有些需要特定的頭文件支持,需要根據(jù)具體情況進(jìn)行選擇。
相關(guān)問(wèn)題拓展閱讀:
- 求解 : 在linux中 比如 fprintf(stderr,“******”);則這個(gè)函數(shù)把錯(cuò)誤信息寫(xiě)到那個(gè)文件里的????
- 如何靈活運(yùn)用Linux 進(jìn)程資源監(jiān)控和進(jìn)程限制
求解 : 在linux中 比如 fprintf(stderr,“******”);則這個(gè)函數(shù)把錯(cuò)誤信息寫(xiě)到那個(gè)文件里的????
stderr 是輸出到標(biāo)準(zhǔn)出錯(cuò),還有類似的:標(biāo)準(zhǔn)輸入和標(biāo)準(zhǔn)輸出.
stderr 標(biāo)準(zhǔn)錯(cuò)誤輸出
這個(gè)函數(shù)是把錯(cuò)核禪誤信息直接輸出到終弊氏陵端,租戚即顯示上與stdout一樣
如何靈活運(yùn)用Linux 進(jìn)程資源監(jiān)控和進(jìn)程限制
你可以使用 mpstat 單獨(dú)查看每個(gè)處理器或者系統(tǒng)整體的活動(dòng),可以是每次一個(gè)快照或者動(dòng)態(tài)更新。啟燃并
為了使用這個(gè)工具,你首先需要安裝 sysstat:
# yum update && yum install sysstat
# aptitutde update && aptitude install sysstat
# zypper update && zypper install sysstat
你可以在 Linux 中學(xué)習(xí) Sysstat 和其中的工具 mpstat、pidstat、iostat 和 sar,了解更多和 sysstat 和其中的工具相關(guān)的信息。悄跡
安裝完 mpstat 之后,段晌就可以使用它生成處理器統(tǒng)計(jì)信息的報(bào)告。
你可以使用下面的命令每隔 2 秒顯示所有 CPU(用-P ALL 表示)的 CPU 利用率(-u),共顯示3次。
# mpstat -P ALL -u 2 3
示例輸出:
Linux 3.19.0-32-generic (tecmint.com) Wednesday 30 March_x86_64_ (4 CPU)
11:41:07 IST CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
11:41:09 IST all 5……….91
11:41:09 IST……….53
11:41:09 IST……….00
11:41:09 IST……….57
11:41:09 IST……….56
11:41:09 IST CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
11:41:11 IST all 11……….66
11:41:11 IST……….50
11:41:11 IST……….68
11:41:11 IST……….50
11:41:11 IST……….60
11:41:11 IST CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
11:41:13 IST all 5……….07
11:41:13 IST……….54
11:41:13 IST……….75
11:41:13 IST……….00
11:41:13 IST……….57
Average: CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
Average: all 7……….89
Average:……….87
Average:……….78
Average:……….35
Average:……….59
要查看指定的 CPU(在下面的例子中是 CPU 0),可以使用:
# mpstat -P 0 -u 2 3
示例輸出:
Linux 3.19.0-32-generic (tecmint.com) Wednesday 30 March_x86_64_ (4 CPU)
11:42:08 IST CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
11:42:10 IST……….50
11:42:12 IST……….37
11:42:14 IST……….74
Average:……….23
上面命令的輸出包括這些列:
CPU: 整數(shù)表示的處理器號(hào)或者 all 表示所有處理器的平均值。
%usr: 運(yùn)行在用戶級(jí)別的應(yīng)用的 CPU 利用率百分?jǐn)?shù)。
%nice: 和 %usr相同,但有 nice 優(yōu)先級(jí)。
%sys: 執(zhí)行內(nèi)核應(yīng)用的 CPU 利用率百分比。這不包括用于處理中斷或者硬件請(qǐng)求的時(shí)間。
%iowait: 指定(或所有)CPU 的空閑時(shí)間百分比,這表示當(dāng)前 CPU 處于 I/O 操作密集的狀態(tài)。
%irq: 用于處理硬件中斷的時(shí)間所占百分比。
%soft: 和%irq相同,但是是軟中斷。
%steal: 虛擬機(jī)非自主等待(時(shí)間片竊取)所占時(shí)間的百分比,即當(dāng)虛擬機(jī)在競(jìng)爭(zhēng) CPU 時(shí)所從虛擬機(jī)管理程序那里“贏得”的時(shí)間。應(yīng)該保持這個(gè)值盡可能小。如果這個(gè)值很大,意味著虛擬機(jī)正在或者將要停止運(yùn)轉(zhuǎn)。
%guest: 運(yùn)行虛擬處理器所用的時(shí)間百分比。
%idle: CPU 沒(méi)有運(yùn)行任何任務(wù)所占時(shí)間的百分比。如果你觀察到這個(gè)值很小,意味著系統(tǒng)負(fù)載很重。在這種情況下,你需要查看詳細(xì)的進(jìn)程列表、以及下面將要討論的內(nèi)容來(lái)確定這是什么原因?qū)е碌摹?/p>
運(yùn)行下面的命令使處理器處于極高負(fù)載,然后在另一個(gè)終端執(zhí)行 mpstat 命令:
# dd if=/dev/zero of=test.iso bs=1G count=1
# mpstat -u -P 0 2 3
# ping -f localhost # Interrupt with Ctrl + C after mpstat below completes
# mpstat -u -P 0 2 3
最后,和 “正?!?情況下 mpstat 的輸出作比較:
正如你在上面圖示中看到的,在前面兩個(gè)例子中,根據(jù)%idle的值可以判斷 CPU 0 負(fù)載很高。
在下一部分,我們會(huì)討論如何識(shí)別資源饑餓型進(jìn)程,如何獲取更多和它們相關(guān)的信息,以及如何采取恰當(dāng)?shù)拇胧?/p>
Linux 進(jìn)程報(bào)告
我們可以使用有名的ps命令,用-eo選項(xiàng)(根據(jù)用戶定義格式選中所有進(jìn)程) 和–sort選項(xiàng)(指定自定義排序順序)按照 CPU 使用率排序列出進(jìn)程,例如:
# ps -eo pid,ppid,cmd,%cpu,%mem –sort=-%cpu
上面的命令只會(huì)顯示PID、PPID、和進(jìn)程相關(guān)的命令、 CPU 使用率以及 RAM 使用率,并按照 CPU 使用率降序排序。創(chuàng)建 .iso 文件的時(shí)候運(yùn)行上面的命令,下面是輸出的前面幾行:
一旦我們找到了感興趣的進(jìn)程(例如PID=2822的進(jìn)程),我們就可以進(jìn)入/proc/PID(本例中是/proc/2822) 列出目錄內(nèi)容。
這個(gè)目錄就是進(jìn)程運(yùn)行的時(shí)候保存多個(gè)關(guān)于該進(jìn)程詳細(xì)信息的文件和子目錄的目錄。
例如:
/proc/2822/io:包括該進(jìn)程的 IO 統(tǒng)計(jì)信息(IO 操作時(shí)的讀寫(xiě)字符數(shù))。
/proc/2822/attr/current:顯示了進(jìn)程當(dāng)前的 SELinux 安全屬性。
/proc/2822/cgroup:如果啟用了 CONFIGCGROUPS 內(nèi)核設(shè)置選項(xiàng),這會(huì)顯示該進(jìn)程所屬的控制組(簡(jiǎn)稱cgroups),你可以使用下面命令驗(yàn)證是否啟用了 CONFIGCGROUPS:
# cat /boot/config-$(uname -r) | grep -i cgroups
如果啟用了該選項(xiàng),你應(yīng)該看到:
CONFIG_CGROUPS=y
根據(jù)紅帽企業(yè)版 Linux 7 資源管理指南之一到四章的內(nèi)容、openSUSE 系統(tǒng)分析和調(diào)優(yōu)指南第九章、Ubuntu 14.04 服務(wù)器文檔Control Groups 章節(jié),你可以使用cgroups管理每個(gè)進(jìn)程允許使用的資源數(shù)目。
/proc/2822/fd這個(gè)目錄包含每個(gè)打開(kāi)的描述進(jìn)程的文件的符號(hào)鏈接。下面的截圖顯示了 tty1(之一個(gè)終端) 中創(chuàng)建 .iso 鏡像進(jìn)程的相關(guān)信息:
上面的截圖顯示 stdin(文件描述符 0)、stdout(文件描述符 1)、stderr(文件描述符 2) 相應(yīng)地被映射到 /dev/zero、 /root/test.iso 和 /dev/tty1。
在 Linux 中為每個(gè)用戶設(shè)置資源限制
如果你不夠小心、讓任意用戶使用不受限制的進(jìn)程數(shù),最終你可能會(huì)遇到意外的系統(tǒng)關(guān)機(jī)或者由于系統(tǒng)進(jìn)入不可用的狀態(tài)而被鎖住。為了防止這種情況發(fā)生,你應(yīng)該為用戶可以啟動(dòng)的進(jìn)程數(shù)目設(shè)置上限。
你可以在 /etc/security/limits.conf 文件末尾添加下面一行來(lái)設(shè)置限制:* hard nproc 10
之一個(gè)字段可以用來(lái)表示一個(gè)用戶、組或者所有人(*), 第二個(gè)字段強(qiáng)制限制可以使用的進(jìn)程數(shù)目(nproc) 為 10。退出并重新登錄就可以使設(shè)置生效。
然后,讓我們來(lái)看看非 root 用戶(合法用戶或非法用戶) 試圖引起 shell fork 炸彈時(shí)會(huì)發(fā)生什么。如果我們沒(méi)有設(shè)置限制, shell fork 炸彈會(huì)無(wú)限制地啟動(dòng)函數(shù)的兩個(gè)實(shí)例,然后無(wú)限循環(huán)地復(fù)制任意一個(gè)實(shí)例。最終導(dǎo)致你的系統(tǒng)卡死。
但是,如果使用了上面的限制,fort 炸彈就不會(huì)成功,但用戶仍然會(huì)被鎖在外面直到系統(tǒng)管理員殺死相關(guān)的進(jìn)程。
提示:limits.conf文件中可以查看其它 ulimit 可以更改的限制。
其它 Linux 進(jìn)程管理工具
除了上面討論的工具, 一個(gè)系統(tǒng)管理員還可能需要:
a) 通過(guò)使用 renice 調(diào)整執(zhí)行優(yōu)先級(jí)(系統(tǒng)資源的使用)。這意味著內(nèi)核會(huì)根據(jù)分配的優(yōu)先級(jí)(眾所周知的 “niceness”,它是一個(gè)范圍從-20到19的整數(shù))給進(jìn)程分配更多或更少的系統(tǒng)資源。
這個(gè)值越小,執(zhí)行優(yōu)先級(jí)越高。普通用戶(而非 root)只能調(diào)高他們所有的進(jìn)程的 niceness 值(意味著更低的優(yōu)先級(jí)),而 root 用戶可以調(diào)高或調(diào)低任何進(jìn)程的 niceness 值。
renice 命令的基本語(yǔ)法如下:
# renice identifier
如果 new priority 后面的參數(shù)沒(méi)有(為空),默認(rèn)就是 PID。在這種情況下,PID=identifier 的進(jìn)程的 niceness 值會(huì)被設(shè)置為
b) 需要的時(shí)候中斷一個(gè)進(jìn)程的正常執(zhí)行。這也就是通常所說(shuō)的“殺死”進(jìn)程。實(shí)質(zhì)上,這意味著給進(jìn)程發(fā)送一個(gè)信號(hào)使它恰當(dāng)?shù)亟Y(jié)束運(yùn)行并以有序的方式釋放任何占用的資源。
按照下面的方式使用 kill 命令殺死進(jìn)程:
# kill PID
另外,你也可以使用pkill結(jié)束指定用戶(-u)、指定組(-G), 甚至有共同的父進(jìn)程 ID (-P)的所有進(jìn)程。這些選項(xiàng)后面可以使用數(shù)字或者名稱表示的標(biāo)識(shí)符。
# pkill identifier
例如:
殺死組GID=1000的所有進(jìn)程.
# pkill -G 1000
殺死PPID 是 4993的所有進(jìn)程.
# pkill -P 4993
在運(yùn)行pkill之前,先用pgrep測(cè)試結(jié)果、或者使用-l選項(xiàng)列出進(jìn)程名稱是一個(gè)很好的辦法。它需要和pkill相同的參數(shù)、但是只會(huì)返回進(jìn)程的 PID(而不會(huì)有其它操作),而pkill會(huì)殺死進(jìn)程。
linux中使用std的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于linux中使用std,C庫(kù)的方法高效運(yùn)用——在Linux上使用std C庫(kù),求解 : 在linux中 比如 fprintf(stderr,“******”);則這個(gè)函數(shù)把錯(cuò)誤信息寫(xiě)到那個(gè)文件里的????,如何靈活運(yùn)用Linux 進(jìn)程資源監(jiān)控和進(jìn)程限制的信息別忘了在本站進(jìn)行查找喔。
香港服務(wù)器選創(chuàng)新互聯(lián),2H2G首月10元開(kāi)通。
創(chuàng)新互聯(lián)(www.cdcxhl.com)互聯(lián)網(wǎng)服務(wù)提供商,擁有超過(guò)10年的服務(wù)器租用、服務(wù)器托管、云服務(wù)器、虛擬主機(jī)、網(wǎng)站系統(tǒng)開(kāi)發(fā)經(jīng)驗(yàn)。專業(yè)提供云主機(jī)、虛擬主機(jī)、域名注冊(cè)、VPS主機(jī)、云服務(wù)器、香港云服務(wù)器、免備案服務(wù)器等。
網(wǎng)頁(yè)標(biāo)題:C庫(kù)的方法高效運(yùn)用——在Linux上使用stdC庫(kù)(linux中使用std)
當(dāng)前路徑:http://fisionsoft.com.cn/article/dppcgih.html


咨詢
建站咨詢
