exec函式的使用問題

2021-09-29 00:22:52 字數 3010 閱讀 7020

學習過程中遇到的問題:

在linux系統中我們可以通過man 命令來進行檢視:

例如:

檢視man命令的使用   		man man
manual sections:

the standard sections of the manual include:

1 user commands

2 system calls

3 c library functions

4 devices and special files

5 file formats and conventions

6 games et. al.

7 miscellanea

8 system administration tools and daemons

檢視exec函式使用			man 3 exec
name:(整個exec函式家族)

execl, execlp, execle, execv, execvp - execute a file
synopsis:

#include (標頭檔案)

extern char **environ;

exec函式家族具體形式:

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 ar**);

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

在這裡,我們對比這兩個函式來進行使用:(其他函式類同)

linux系統中一切皆檔案!!!

linux系統中一切皆檔案!!!

linux系統中一切皆檔案!!!

例項:使用execlp

#include#includeint main ()

使用execlp

#include#includeint main ()

對比執行結果,我們發現兩個函式執行的結果是相同的。也就是說重點在於使用,其中也不難看出兩個函式引數是不一樣的,乙個呼叫的是路徑,乙個直接是檔名

也是有人會問ls不是乙個指令嗎?指令也可以呼叫?

答案:linux系統中一切皆檔案!!!

若還是有疑問,不如自己上機進行實驗操作。實踐出真知

exec函式是為了在程序中執行一段其他的程式而設定的。

pid=fork();
這句話是建立乙個子程序。之後父子程序會分別執行屬於**塊。

測試:

pid=fork();

printf("hello world!");

大家可以看看這句話輸出了幾次?(自己動手試一下啊!)

由此我們可以知道執行fork()函式會發生這樣的事情:

既然有父程序以及子程序之分,那就該想如何才能區分父子程序呢?

fork()函式知識點:

不需要引數並返回乙個整數值。下面是fork()返回的不同值。

負值:建立子程序失敗。

零: 返回到新建立的子程序。

正值:返回父母或來電者。該值包含新建立的子程序的程序id。

因此我們可以這樣做:

pid=fork();

if(pid == 0)

if(pid > 0)

此時,我們的主角 exec函式就登場了:在執行**部分就可以呼叫該函式。

例項:

1 #include2 #include3 #include4 #include5 #include6 int main()

7 15 pid_t pid;

16 pid=fork();

17 if(pid==0)

18

26 if(pid>0)

27

33 return 0;

34 }

以上內容涉及到了無名管道,有興趣的讀者可以了解一下。重點是看子程序中的execl函式,若該函式執行成功,則第24行的printf(「excel error\n」);語句不會執行,相反(excel執行失敗)會執行。因此子程式中的(excel函式以下)內容會被execl函式執行的內容替代,在該例項中,即

[root@cent0 home]# ls (目錄:home 命令:ls <==> execl)

hadoop mydir (是這條語句哦!)

會被該語句覆蓋。(動手試一試,也許你會 哇塞,原來是這樣啊!)

2019/10/26 13:31:49

exec函式 python 使用exec的疑惑

簡介 exec 執行儲存在字串或檔案中的python語句,相比於 eval,exec可以執行更複雜的 python exec函式功能強大,也很容易上手,在做未知變數定義時很好用。例如 使用exec函式可以將其中的字串語句定義為變數 with open data.txt r as f for line...

exec函式族的使用

呼叫shell指令碼命令 execlp sh sh filename char 0 exec用被執行的程式完全替換呼叫它的程式的影像。fork建立乙個新的程序就產生了乙個新的pid,exec啟動乙個新程式,替換原有的程序,因此這個新的被exec執行的程序的pid不會改變,和呼叫exec函式的程序一樣...

exec函式族的使用

exec函式族的使用 exec用被執行的程式完全替換呼叫它的程式的影像。fork建立乙個新的程序就產生了乙個新的pid,exec啟動乙個新程式,替換原有的程序,因此這個新的被exec執行的程序的pid不會改變,和呼叫exec函式的程序一樣。下面來看下exec函式族 include int execl...