c語言編寫linux命令,linux系統(tǒng)怎么編寫c語言

在linux如何c語言編寫程序。

linux終端下,編譯C語言程序步驟為:

十余年的錫林郭勒盟網(wǎng)站建設(shè)經(jīng)驗(yàn),針對設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。全網(wǎng)營銷推廣的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整錫林郭勒盟建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)從事“錫林郭勒盟網(wǎng)站設(shè)計(jì)”,“錫林郭勒盟網(wǎng)站推廣”以來,每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。

采用vi進(jìn)行源代碼編寫,編寫完成后,:wq存盤退出,如:

vi test.c

在命令行下,運(yùn)行g(shù)cc編譯程序,生成執(zhí)行碼,如:

gcc -o test test.c

-o 表示指明生成的執(zhí)行碼名稱

運(yùn)行編譯后的執(zhí)行碼

./test

如何在C語言編程中調(diào)用linux系統(tǒng)終端下的命令

system(執(zhí)行shell 命令)

相關(guān)函數(shù) fork,execve,waitpid,popen

表頭文件 #includestdlib.h

定義函數(shù) int system(const char * string);

函數(shù)說明 system()會(huì)調(diào)用fork()產(chǎn)生子進(jìn)程,由子進(jìn)程來調(diào)用/bin/sh-c string來執(zhí)行參數(shù)string字符串所代表的命令,此命令執(zhí)行完后隨即返回原調(diào)用的進(jìn)程。在調(diào)用system()期間SIGCHLD 信號(hào)會(huì)被暫時(shí)擱置,SIGINT和SIGQUIT 信號(hào)則會(huì)被忽略。

返回值 如果system()在調(diào)用/bin/sh時(shí)失敗則返回127,其他失敗原因返回-1。若參數(shù)string為空指針(NULL),則返回非零值。如果system()調(diào)用成功則最后會(huì)返回執(zhí)行shell命令后的返回值,但是此返回值也有可能為system()調(diào)用/bin/sh失敗所返回的127,因此最好能再檢查errno 來確認(rèn)執(zhí)行成功。

附加說明 在編寫具有SUID/SGID權(quán)限的程序時(shí)請勿使用system(),system()會(huì)繼承環(huán)境變量,通過環(huán)境變量可能會(huì)造成系統(tǒng)安全的問題。

范例 #includestdlib.h

main()

{

system(“l(fā)s -al /etc/passwd /etc/shadow”);

}

執(zhí)行 -rw-r--r-- 1 root root 705 Sep 3 13 :52 /etc/passwd

-r--------- 1 root root 572 Sep 2 15 :34 /etc/shadow

通過幾個(gè)簡單的Linux命令,深入理解c語言編

主要使用gcc命令以及以下幾個(gè)參數(shù):

-E Preprocess only; do not compile, assemble or link

-S Compile only; do not assemble or link

-c Compile and assemble, but do not link

-o file Place the output into file

環(huán)境配置好以后,讓我們開始c語言的編譯之旅吧~

編寫c語言源代碼

很多l(xiāng)inux命令都可以新建一個(gè)文件,比如

$ touch test.c

建立一個(gè)空白的文件

$ vim test.c

使用vim(文本編輯器)編輯test.c,如果test.c不存在,則創(chuàng)建

$ echo "123" test.c

通過輸出重定向新建一個(gè)文件

創(chuàng)建完test.c后,將下面這段Hello World代碼寫到test.c中(很多方法)

#include stdio.h

int main(){

printf("Hello world\n");

return 0;

}

寫完之后可以使用ls命令來查看當(dāng)前目錄下的文件,檢查test.c是否存在

$ ls

使用cat命令查看test.c中的內(nèi)容,檢查是否寫入成功

$ cat test.c

ls-cat

展開頭文件(預(yù)處理)

$ gcc -E test.c -o test_pre.c

這個(gè)命令把源代碼test.c中的頭文件展開,并把結(jié)果輸出到test_pre.c

(可以使用cat或者vim命令查看test_pre.c文件中的內(nèi)容)

per

test_pre.c中的內(nèi)容是這樣的,可以發(fā)現(xiàn)原本幾行的代碼變成了幾百行,而且已經(jīng)見不到include關(guān)鍵字了,取而代之的是一些變量定義的代碼,這些代碼就是stdio.h中的內(nèi)容,和stdio.h中頭文件展開后的內(nèi)容。

編譯

$ gcc -S test_pre.c -o test_asm.s

這一條命令將上一步預(yù)處理過后的源代碼編譯成為匯編代碼

asm

現(xiàn)在看到的是test_asm.s里面的匯編代碼。

什么是匯編?

匯編語言是匯編指令集、偽指令集和使用它們規(guī)則的統(tǒng)稱,使用具有一定含義的符號(hào)為助憶符,用指令助憶符、符號(hào)地址等組成的符號(hào)指令稱為匯編格式指令。

簡單的可以理解為匯編語言是一本詞典,01100101011010這樣的二進(jìn)制字符串是單詞,匯編指令是單詞的含義。計(jì)算機(jī)能讀懂二進(jìn)制字符串,而人能讀懂的是翻譯過來的匯編指令。

匯編

$ gcc -c test_asm.s -o test_obj.o

這一步將test_asm.s匯編成為目標(biāo)文件,目標(biāo)文件中存儲(chǔ)的就是010101010這樣的字符串了,可以用cat命令試試去讀取test_obj.o

obj

可以發(fā)現(xiàn)打印出來許多不可見的字符,原因是目標(biāo)文件已經(jīng)是二進(jìn)制格式的了,不同于源代碼(文本格式)

有關(guān)文件的格式可以看下這里的介紹:

鏈接

鏈接器負(fù)責(zé)將程序的目標(biāo)文件與所需的所有附加的目標(biāo)文件連接起來,最終生成可執(zhí)行文件。附加的目標(biāo)文件包括靜態(tài)連接庫和動(dòng)態(tài)連接庫。

這個(gè)例子中沒有附加的目標(biāo)文件,所以只需要目標(biāo)文件做被鏈接的對象。

有關(guān)鏈接器的詳細(xì)講解大家可以看下這里:

$ gcc test_obj.o -o hello

gcc本身可以充當(dāng)鏈接器,這里使用gcc命令將目標(biāo)文件test_obj.o鏈接成了可執(zhí)行文件hello

ld

運(yùn)行程序!

至此,源代碼已經(jīng)經(jīng)歷了預(yù)處理、編譯、匯編、鏈接四步成為了可執(zhí)行文件,現(xiàn)在試著運(yùn)行一下這個(gè)程序吧

$ ./hello

hello

小結(jié)

首先我們創(chuàng)建了源文件test.c,然后用gcc -E將源文件中的頭文件展開,這一步叫做預(yù)處理;

之后通過gcc -S將預(yù)處理后的源文件編譯了匯編代碼,這一步叫做編譯;

接著使用gcc -c命令將匯編代碼轉(zhuǎn)換成了二進(jìn)制的目標(biāo)文件,這一步操作叫做匯編;

目標(biāo)文件不同于源代碼,是二進(jìn)制格式,是源文件編譯過程中產(chǎn)生的中間文件,通過鏈接器可以將多個(gè)目標(biāo)文件鏈接成為可執(zhí)行文件,這一步叫做鏈接。

源文件-(預(yù)處理-編譯-匯編-鏈接)-可執(zhí)行文件

一般大家所說的c語言編譯,其實(shí)是上述這四步的簡稱。

本文名稱:c語言編寫linux命令,linux系統(tǒng)怎么編寫c語言
當(dāng)前路徑:http://m.kartarina.com/article8/dseegop.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站制作建站公司云服務(wù)器搜索引擎優(yōu)化微信小程序虛擬主機(jī)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁設(shè)計(jì)公司
主站蜘蛛池模板: 国产成人精品无码一区二区三区 | 亚洲不卡中文字幕无码| 亚洲精品无码专区在线播放| 精品无码一区二区三区爱欲九九 | 亚洲人av高清无码| 精品无码国产污污污免费| 亚洲午夜无码AV毛片久久| 无码精品国产一区二区三区免费| 无码人妻丰满熟妇片毛片| 天堂Aⅴ无码一区二区三区| 无码专区天天躁天天躁在线| 国产日产欧洲无码视频| 无码精品视频一区二区三区| 无码精品人妻一区| 亚洲av无码片区一区二区三区| 国产V片在线播放免费无码 | 午夜精品久久久久久久无码| 亚洲AV永久无码精品成人| 国产精品99无码一区二区| 亚洲熟妇无码av另类vr影视| 国产成人无码精品一区二区三区| 人妻av中文字幕无码专区| 精品三级AV无码一区| 亚洲Aⅴ无码专区在线观看q| 中文无码日韩欧免费视频| 日韩中文无码有码免费视频| av大片在线无码免费| 无码精品人妻一区二区三区漫画| H无码精品3D动漫在线观看| 无码熟熟妇丰满人妻啪啪软件| 亚洲色在线无码国产精品不卡| 亚洲AV无码专区在线亚| 日韩欧国产精品一区综合无码| 国产成人无码a区在线视频| 在线A级毛片无码免费真人 | 日韩美无码五月天| 免费无码午夜福利片69| 影音先锋无码a∨男人资源站| 无码VA在线观看| 亚洲最大无码中文字幕| 亚洲欧洲av综合色无码|