日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
C語言編寫Linux命令行工具(c實現(xiàn)linux命令行)

:從入門到實踐

成都創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于網(wǎng)站設(shè)計制作、成都做網(wǎng)站、從江網(wǎng)絡(luò)推廣、小程序定制開發(fā)、從江網(wǎng)絡(luò)營銷、從江企業(yè)策劃、從江品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎;成都創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供從江建站搭建服務(wù),24小時服務(wù)熱線:18980820575,官方網(wǎng)址:www.cdcxhl.com

Linux作為一款開源的操作系統(tǒng),在服務(wù)器領(lǐng)域被廣泛應(yīng)用。其中,命令行工具在Linux系統(tǒng)中扮演著至關(guān)重要的角色,能夠通過命令行工具,完成大量系統(tǒng)操作任務(wù),例如文件操作、進程管理、網(wǎng)絡(luò)配置等。C語言是一種高效的編程語言,而且在Linux系統(tǒng)下有很好的兼容性,因此,本文將詳細(xì)介紹如何使用,包括開發(fā)環(huán)境的搭建、Linux下C語言程序的編寫過程、Makefile的使用等,旨在幫助讀者快速掌握Linux命令行工具的開發(fā)技能。

一、開發(fā)環(huán)境搭建

在進行Linux下C語言程序開發(fā)前,需要先搭建好相應(yīng)的開發(fā)環(huán)境。下面,介紹如何搭建所需的開發(fā)環(huán)境。

1. 安裝Linux系統(tǒng)

需要在計算機上安裝Linux系統(tǒng)。如果沒有安裝過Linux系統(tǒng),可以選擇常見的發(fā)行版,例如Ubuntu、CentOS等。安裝方法和步驟可通過搜索引擎獲取。

2. 安裝GCC編譯器

GCC是一款開源的編譯器套件,包括C、C++等編譯器,可以在Linux系統(tǒng)下進行安裝。在終端中輸入以下命令即可安裝:

“`

sudo apt-get install gcc

“`

3. 安裝開發(fā)環(huán)境

Linux下還需要一些開發(fā)環(huán)境的支持,如標(biāo)準(zhǔn)C庫、頭文件等。可以通過以下命令安裝:

“`

sudo apt-get install build-essential

“`

二、Linux下C語言程序的編寫

當(dāng)開發(fā)環(huán)境搭建完成后,就可以進行C語言程序的編寫了。下面,通過一個簡單的示例來介紹如何編寫Linux下的C語言程序。

1. 編寫Hello World程序

在終端中輸入以下命令,創(chuàng)建一個名為test.c的C程序源文件:

“`

vi test.c

“`

打開test.c文件后,輸入以下代碼:

“`c

#include

int mn(){

printf(“Hello, World!\n”);

return 0;

}

“`

保存文件并退出編輯器,然后使用以下命令編譯程序:

“`

gcc test.c -o test

“`

執(zhí)行編譯后的程序,運行以下命令:

“`

./test

“`

輸出如下內(nèi)容:

“`

Hello, World!

“`

2. 通過命令行參數(shù)處理

在Linux系統(tǒng)中,命令行工具的參數(shù)通常是通過命令行參數(shù)來傳遞的。下面使用一個示例來說明如何通過命令行參數(shù)處理數(shù)據(jù)。

打開test.c文件,修改代碼如下:

“`c

#include

#include

int mn(int argc, char *argv[]){

if(argc != 2){

printf(“usage: %s filename\n”, argv[0]);

exit(1);

}

printf(“open file:%s\n”, argv[1]);

return 0;

}

“`

上述程序需要讀取一個文件名,然后打開文件。如果用戶沒有輸入文件名,程序會輸出相應(yīng)的提示信息。

編譯程序并執(zhí)行,使用以下命令:

“`

gcc test.c -o test

./test test.txt

“`

其中,test.txt是一個存在的文件名。輸出如下內(nèi)容:

“`

open file:test.txt

“`

三、使用Makefile簡化編譯過程

在Linux下,使用Makefile可以簡化C語言程序的編譯過程,避免手動執(zhí)行編譯命令的繁瑣。下面,通過一個示例來介紹Makefile的使用方法。

1. 創(chuàng)建Makefile

在終端中輸入以下命令,創(chuàng)建一個名為Makefile的文件:

“`

vi Makefile

“`

打開Makefile后,輸入以下代碼:

“`makefile

CC = gcc

all: testutils

testutils: test.o utils.o

$(CC) -o testutils test.o utils.o

test.o: test.c utils.h

$(CC) -c test.c

utils.o: utils.c utils.h

$(CC) -c utils.c

clean:

rm -f testutils test.o utils.o

“`

上述代碼中,CC定義了編譯器的類型,all是一個偽目標(biāo),testutils是程序的目標(biāo)名,test.o和utils.o是依賴目標(biāo)文件,后面的三個命令是用來編譯程序和生成目標(biāo)文件的。

2. 編寫源文件

在同一目錄下,創(chuàng)建test.c和utils.c源文件。test.c的內(nèi)容如下:

“`c

#include

#include

#include “utils.h”

int mn(int argc, char *argv[]){

if(argc != 2){

printf(“usage: %s filename\n”, argv[0]);

exit(1);

}

print_file(argv[1]);

return 0;

}

“`

utils.c的內(nèi)容如下:

“`c

#include

void print_file(char *filename){

FILE *fp = NULL;

char buf[1024];

fp = fopen(filename, “r”);

while(fgets(buf, 1024, fp) != NULL){

printf(“%s”, buf);

}

fclose(fp);

}

“`

其中,utils.c中的print_file函數(shù)用來打開一個文件名并讀取文件內(nèi)容。

3. 編譯程序

使用以下命令來編譯程序:

“`

make

“`

執(zhí)行完該命令后,會生成一個名為testutils的可執(zhí)行程序。在終端中運行以下命令:

“`

./testutils Makefile

“`

即可看到Makefile的內(nèi)容被輸出到終端中。

四、

通過上述步驟,我們能夠基本掌握使用的方法。在開發(fā)過程中,需要注意編程規(guī)范和良好的編寫習(xí)慣;同時,還需要熟練運用Linux系統(tǒng)提供的系統(tǒng)調(diào)用函數(shù)和庫函數(shù),以便更加高效地進行命令行工具的開發(fā)。

參考文獻:

1. Linux命令大全. https://man.linuxde.net/

成都網(wǎng)站建設(shè)公司-創(chuàng)新互聯(lián),建站經(jīng)驗豐富以策略為先導(dǎo)10多年以來專注數(shù)字化網(wǎng)站建設(shè),提供企業(yè)網(wǎng)站建設(shè),高端網(wǎng)站設(shè)計,響應(yīng)式網(wǎng)站制作,設(shè)計師量身打造品牌風(fēng)格,熱線:028-86922220

linux下怎樣用c語言調(diào)用shell命令

C程序調(diào)用shell腳本共同擁有三種法子 :system()、popen()、exec系列數(shù)call_exec1.c ,

system() 不用你自己去產(chǎn)生進程。它已經(jīng)封裝了,直接增加自己的命令

exec 須要你自己 fork 進程,然后exec 自己的命令

popen() 也能夠?qū)崿F(xiàn)運行你的命令,比system 開銷小

方法一、system()的使用。我直接上代碼吧

int system(const char *command);

我在/home/book/shell新建一個test.sh文件例如以下:

#!bin/bash

echo $HOME

echo “the is test!”

test.c文件例如以下:

#include

int main()

{

system(“bash /home/book/shell/test.sh”); /* chmod +x test.sh ,路徑前面要加上bash */

return 0;

}

運行例如以下命令來編譯:

gcc test.c -o test

測試命令:

./test

結(jié)果例如以下:

/root

the is test!

方法二:popen() 會調(diào)用fork()產(chǎn)生 子歷程,然后從子歷程中調(diào)用/bin/sh -c來履行 參數(shù)command的指令。參數(shù)type可應(yīng)用 “r”代表讀取。“w”代表寫入。遵循此type值。popen()會建立 管道連到子歷程的標(biāo)準(zhǔn) 輸出設(shè)備 或標(biāo)準(zhǔn) 輸入設(shè)備 ,然后返回一個文件指針。

隨后歷程便可利用 此文件指針來讀取子歷程的輸出設(shè)備 或是寫入到子歷程的標(biāo)準(zhǔn) 輸入設(shè)備 中。此外,全部應(yīng)用 文 件指針(FILE*)操作的函數(shù)也都能夠應(yīng)用 ,除了fclose()以外。

返回值:若成功 則返回文件指針,否則返回NULL,差錯 原因存于errno中。注意:在編寫具SUID/SGID權(quán)限的程序時請盡量避免應(yīng)用 popen()。popen()會繼承環(huán)境變量。通過環(huán)境變量可能會造成系統(tǒng)安全的問題

FILE *popen(const char *command, const char *type);

int pclose(FILE *stream);

其它不用改變我們直接改動test.c文件:

#include

int main()

{

char buffer;

FILE *fp=popen(“bash /home/book/shell/test.sh”,”r”);

fgets(buffer,sizeof(buffer),fp);

printf(“%s”,buffer);

pclose(fp);

return 0;

}

方法三:exec函數(shù)簇 (我不太懂,copy別人的。也沒有驗證。習(xí)慣方法一)

須要注意的是exec并非1個函數(shù), 事實上它僅僅是一組函數(shù)的統(tǒng)稱, 它包含以下6個函數(shù):

#include

int execl(const char *path, const char *arg, …);

int execlp(const char *file, const char *arg, …);

int execle(const char *path, const char *arg, …, char *const envp);

int execv(const char *path, char *const argv);

int execvp(const char *file, char *const argv);

int execve(const char *path, char *const argv, char *const envp;

能夠見到這6個函數(shù)名字不同, 并且他們用于接受的參數(shù)也不同.

實際上他們的功能都是幾乎相同的, 由于要用于接受不同的參數(shù)所以要用不同的名字區(qū)分它們, 畢竟c語言沒有函數(shù)重載的功能嘛..

可是實際上它們的命名是有規(guī)律的:

exec

exec函數(shù)里的參數(shù)能夠分成3個部分, 運行文件部分, 命令參數(shù)部分, 環(huán)境變量部分.

比如我要運行1個命令 ls -l /home/gateman

運行文件部分就是 “/usr/bin/ls”

命令參賽部分就是 “l(fā)s”,”-l”,”/home/gateman”,NULL見到是以ls開頭 每1個空格都必須分開成2個部分, 并且以NULL結(jié)尾的啊.

環(huán)境變量部分, 這是1個數(shù)組,最后的元素必須是NULL 比如 char * env = {“PATH=/home/gateman”, “USER=lei”, “STATUS=testing”, NULL};

好了說下命名規(guī)則:

e興許, 參數(shù)必須帶環(huán)境變量部分, 環(huán)境變零部分參數(shù)會成為運行exec函數(shù)期間的環(huán)境變量, 比較少用

l 興許, 命令參數(shù)部分必須以”,” 相隔, 最后1個命令參數(shù)必須是NULL

v 興許, 命令參數(shù)部分必須是1個以NULL結(jié)尾的字符串指針數(shù)組的頭部指針.比如char * pstr就是1個字符串的指針, char * pstr 就是數(shù)組了, 分別指向各個字符串.

關(guān)于Linux命令的介紹,看看《linux就該這么學(xué)》,具體關(guān)于這一章地址3w(dot)linuxprobe/chapter-02(dot)html

p興許, 運行文件部分能夠不帶路徑, exec函數(shù)會在$PATH中找

還有1個注意的是, exec函數(shù)會代替運行它的進程, 也就是說, 一旦exec函數(shù)運行成功, 它就不會返回了, 進程結(jié)束. 可是假設(shè)exec函數(shù)運行失敗, 它會返回失敗的信息, 并且進程繼續(xù)運行后面的代碼!

通常exec會放在fork() 函數(shù)的子進程部分, 來替代子進程運行啦, 運行成功后子程序就會消失, 可是運行失敗的話, 必須用exit()函數(shù)來讓子進程退出!

C程序調(diào)用shell腳本共同擁有三種法子 :system()、popen()、exec系列數(shù)call_exec1.c ,

system() 不用你自己去產(chǎn)生進程。它已經(jīng)封裝了,直接增加自己的命令

exec 須要你自己 fork 進程,然后exec 自己的命令

popen() 也能夠?qū)崿F(xiàn)運行你的命令,比system 開銷小

方法一、system()的使用。我直接上代碼吧

int system(const char *command);

我在/home/book/shell新建一個test.sh文件例如以下:

#!bin/bash

echo $HOME

echo “the is test!”

test.c文件例如以下:

#include

int main()

{

system(“bash /home/book/shell/test.sh”); /* chmod +x test.sh ,路徑前面要加上bash */

return 0;

}

運行例如以下命令來編譯:

gcc test.c -o test

測試命令:

./test

結(jié)果例如以下:

/root

關(guān)于c 實現(xiàn)linux命令行的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。

創(chuàng)新互聯(lián)【028-86922220】值得信賴的成都網(wǎng)站建設(shè)公司。多年持續(xù)為眾多企業(yè)提供成都網(wǎng)站建設(shè),成都品牌建站設(shè)計,成都高端網(wǎng)站制作開發(fā),SEO優(yōu)化排名推廣服務(wù),全網(wǎng)營銷讓企業(yè)網(wǎng)站產(chǎn)生價值。


分享名稱:C語言編寫Linux命令行工具(c實現(xiàn)linux命令行)
文章網(wǎng)址:http://www.dlmjj.cn/article/dpghcgj.html