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

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


咨詢
建站咨詢
