新聞中心
在Linux系統(tǒng)中,可執(zhí)行文件是由機(jī)器語言編寫的二進(jìn)制文件,可以通過在命令行終端中輸入可執(zhí)行文件名并回車運(yùn)行。但是有時候需要在C語言中調(diào)用可執(zhí)行文件,以實現(xiàn)一些自動化操作的目的。本篇文章將介紹。

成都創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),北鎮(zhèn)企業(yè)網(wǎng)站建設(shè),北鎮(zhèn)品牌網(wǎng)站建設(shè),網(wǎng)站定制,北鎮(zhèn)網(wǎng)站建設(shè)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,北鎮(zhèn)網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。
一、Linux下調(diào)用可執(zhí)行文件的幾種方式
在Linux系統(tǒng)中,有多種方式可以調(diào)用可執(zhí)行文件,包括:
1.使用system()函數(shù)調(diào)用可執(zhí)行文件。
2.使用popen()函數(shù)將可執(zhí)行文件的輸出作為字符串讀取到C程序中。
3.使用fork()和execv()函數(shù)組合來調(diào)用可執(zhí)行文件。
4.使用Linux下的IPC機(jī)制(如管道、共享內(nèi)存等)來交換數(shù)據(jù)。
在這些方法中,使用system()函數(shù)是最簡單的方法,而使用fork()和execv()函數(shù)組合可以實現(xiàn)更復(fù)雜的操作。在本篇文章中,我們將選擇第三種方式,并介紹相關(guān)的函數(shù)和用法。
二、fork()和execv()函數(shù)的用法
1.fork()函數(shù)的原型:
pid_t fork(void);
fork()函數(shù)創(chuàng)建一個新的進(jìn)程。父進(jìn)程和子進(jìn)程在執(zhí)行fork()函數(shù)之后,它們的代碼和數(shù)據(jù)段被完全復(fù)制到內(nèi)存中,但是它們具有不同的進(jìn)程ID和線程ID,因此在執(zhí)行fork()函數(shù)之后這兩個進(jìn)程運(yùn)行在不同的地址空間中。
2.execv()函數(shù)的原型:
int execv(const char *path, char *const argv[]);
execv()函數(shù)用于在進(jìn)程中執(zhí)行一個新的程序。其中參數(shù)path為可執(zhí)行文件路徑名,參數(shù)argv是一個以NULL結(jié)尾的字符串?dāng)?shù)組,表示傳遞給新程序的參數(shù)。
下面我們來看一個例子,使用fork()和execv()函數(shù)組合來調(diào)用可執(zhí)行文件。
三、示例代碼
#include
#include
#include
#include
int mn() {
pid_t pid;
char *args[] = {“./test”, NULL};
int status;
pid = fork();
if (pid
printf(“Fork fled.\n”);
exit(1);
}
else if (pid == 0) {
// 子進(jìn)程中執(zhí)行可執(zhí)行文件
printf(“Child process start.\n”);
execv(args[0], args);
printf(“Child process end.\n”);
exit(0);
}
else {
// 父進(jìn)程中等待子進(jìn)程結(jié)束
wt(&status);
printf(“Parent process end.\n”);
}
return 0;
}
在這個例子中,我們將要調(diào)用的可執(zhí)行文件命名為test。我們在mn()函數(shù)中定義一個以NULL結(jié)尾的字符串?dāng)?shù)組args,其中之一項為可執(zhí)行文件的文件名。然后調(diào)用fork()函數(shù)創(chuàng)建一個新的進(jìn)程,然后在子進(jìn)程中調(diào)用execv()函數(shù)執(zhí)行可執(zhí)行文件。
在父進(jìn)程中,我們等待子進(jìn)程結(jié)束,然后打印一條信息,并退出程序。
四、使用方法
1.編寫可執(zhí)行文件
先要編寫一個可以在Linux中執(zhí)行的可執(zhí)行文件,我們以C語言為例,編寫如下代碼:
#include
int mn() {
printf(“Hello, world!\n”);
return 0;
}
保存為test.c文件,然后運(yùn)行以下命令編譯生成可執(zhí)行文件test:
gcc -o test test.c
2.編寫調(diào)用程序
將上述示例代碼保存為calltest.c文件,編譯生成可執(zhí)行文件calltest:
gcc -o calltest calltest.c
3.運(yùn)行調(diào)用程序
在終端中切換到calltest所在的目錄,運(yùn)行可執(zhí)行文件:
./calltest
將會得到如下輸出:
Child process start.
Hello, world!
Parent process end.
可以看到,我們成功地在C語言程序中調(diào)用了一個可執(zhí)行文件并獲取了輸出。
相關(guān)問題拓展閱讀:
- linux環(huán)境,請問如何在C代碼中調(diào)用執(zhí)行另一個C程序,謝謝了。
linux環(huán)境,請問如何在C代碼中調(diào)用執(zhí)行另一個C程序,謝謝了。
system可以,通用函數(shù)是不問系統(tǒng)的
exec 也行
怎么感覺概念好混亂,.c文件能夠“執(zhí)行”么(又不是shell)?他編譯出來的.out才能夠執(zhí)行吧。
可以用坦游標(biāo)準(zhǔn)庫的:
#include
system(這里寫簡瞎要執(zhí)行的可執(zhí)攔信空行文件的路徑的C字符串);
關(guān)于linux c 調(diào)用可執(zhí)行文件的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
成都網(wǎng)站推廣找創(chuàng)新互聯(lián),老牌網(wǎng)站營銷公司
成都網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián)(www.cdcxhl.com)專注高端網(wǎng)站建設(shè),網(wǎng)頁設(shè)計制作,網(wǎng)站維護(hù),網(wǎng)絡(luò)營銷,SEO優(yōu)化推廣,快速提升企業(yè)網(wǎng)站排名等一站式服務(wù)。IDC基礎(chǔ)服務(wù):云服務(wù)器、虛擬主機(jī)、網(wǎng)站系統(tǒng)開發(fā)經(jīng)驗、服務(wù)器租用、服務(wù)器托管提供四川、成都、綿陽、雅安、重慶、貴州、昆明、鄭州、湖北十堰機(jī)房互聯(lián)網(wǎng)數(shù)據(jù)中心業(yè)務(wù)。
當(dāng)前標(biāo)題:如何在Linux中使用C語言調(diào)用可執(zhí)行文件 (linux c 調(diào)用可執(zhí)行文件)
網(wǎng)頁地址:http://www.dlmjj.cn/article/cdihgii.html


咨詢
建站咨詢
