學習過程中遇到的問題:
在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...