導航:首頁 > 操作系統 > execl函數linux

execl函數linux

發布時間:2022-09-28 05:29:33

A. linux下execl()進程管理函數的參數理解

/bin/ls 是執行文件, ls,-al。。。。接下去的依次是shell裡面的參數0,1。。。。
環境變數的意思就是環境變數。。。

B. linux下exec 函數第一個參數和第二個參數的區別

哪裡寫的這些...好亂阿..

先解釋下基本的:

int main(argc,char * argv[])
main的參數,就是命令行參數.

比如你的可執行文件是test,你希望在程序執行時傳入IP地址,那麼可以這樣:

./test 127.0.0.1

此時,argc =1,argv[1]是就是指向"127.0.0.1"指針(命令參數全部當作字元串來處理的)。
而 argv[0]就代表第一個參數,這里對應的就是"./test"。
argc和argv在mian裡面都是可以使用的,出了main的范圍就不能使用了。

再來說你提出的第一個地方,exec的問題。

exec實際上包含了一組函數,execl, execlp, execle, execv, execvp, execvpe
具體使用方法,你man execv就可以得到這些函數的使用方法。

exec函數的作用是,產生一個新進程,結束當前進程(具體執行的操作是復制當前進程的一部分數據和許可權,然後根據參數啟動一個新的進程)。

exec這組函數執行時候,需要提供的參數包括:一個可執行程序的路徑,傳遞給可執行程序的參數。(這里的參數,與剛才說到的main的參數含義相同。)

說到這里應該明白了吧...就一個。

我不知道你要hello world干什麼...照你意思給寫了個.

第一個,就是你貼出來的代碼改動一點點(我這邊運行有點問題):

#include <stdio.h>
main(int argc,char* argv[])
{
int i=0
while(i<=argc)
{
printf("arguement %d : %s ",i,argv[i]);
printf("\n");
i++;
}
}

運行程序:
$gcc test.c -o test
$./test hello world
輸出結果:
[ksl@myhost WGX]$ ./test hello world
Arguement 0:./test
Arguement 1:hello
Arguement 2:world
Arguement 3:(null)

然後第二個,使用exec的例子,我用execl吧..
文件名是test1.c

#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>

void main(int argc,char *argv[])
{
printf("This is not exec...");

execl("./test","hello","world",NULL);

//如果exec執行正常,下面的printf將不會被執行
//因為當前進程已經結束,./test將被執行
printf("exec error");
}

輸出結果:
[ksl@myhost WGX]$ ./test1
Arguement 0:hello
Arguement 1:world
Arguement 2:(null)

後者並沒輸出"./test"....就是exec啟動的程序,其命令行參數中只有參數.(我也不曉得原因...=.=||)

C. Linux-C語言execl函數的使用問題

在終端里敲:man execl 然後自己看手冊...

D. linux中execl()這個函數的具體用法怎麼樣的啊 希望高人指教,最好能有一個簡單的例子

man execl ,,,裡面非常的詳細,還有例子,比在這里回答方便的多。
以後要多學會用man命令去查詢linux中不知道的東西。

E. 誰能解釋一下linux下execle函數的用法嗎最好能給一個程序例子!

如果你理解execv, 那麼execle和他的區別就是, 前者的調用參數是以數組形式給的,而後者則是以列表方式給,也就是execle(path, arg1, arg2, ..., envp), 並且提供了環境變數參數;

#include<unistd.h>
#include<stdio.h>
#include<stdlib.h>

int main()
{
char *envp[]={"PATH=/tmp","USER=shan",NULL};
if(fork()==0)
{
if(execle("/bin/dir","dir",NULL,envp)<0)
perror("execle error!");
}
return 0;
}

F. linux C語言 exec函數的相關問題

直接把宏定義成字元串啊,就可以了
#define FILEPATHA $(HOME)/

#define FILEPATHB 「Elevator/floor_three」

char* FILEPATH=NULL;
FILEPATH=(char*)malloc(30);
memcpy(FILEPATH,A,strlen(A));//拼接字元串
strcat(FILEPATH,B);

G. linux中進程的vfork()和execl()函數

寫兩個測試程序測試一下,在程序裡面加log。
自己調試才會理解深刻。
很簡單的一個進程編寫問題。

H. linux中為什麼在fork裡面execl呢

因為exec系列的函數(包括execl函數)都是將當前進程替換成新進程,也就是說新進程啟動後原來的進程就不存在了,exec系列函數後面的那些代碼就不會再執行了。如果你不放在fork子進程裡面,那主進程在執行execl函數後就完全不存在了,所以exec系列函數的使用都是先fork然後在子進程裡面調用。

I. Linux編程問題,execl("/bin/ls", "ls", "-al", "/etc/passwd", (char *) 0);

execl,l代表list,參數表的意思,
(char *) 0,代表空指針,說明參數表結束。
這個函數的原型是可變參數,空指針給庫解析參數的時候防止程序錯誤。execl是個庫函數,真正的系統調用是execve。

J. linux 系統中execl的作用是

intexecl(constchar*path,constchar*arg,...);

是系統提供的介面函數

execl是exec函數族中的一員

exec族函數的功能是載入一個新的程序替換掉當前的進程

它可以調用一個外部程序到當前的進程空間里

但不會產生一個新的進程(它只是將當前進程的映像替換成新載入的程序的映像)


可以寫一個程序清楚地看到

d.c

#include<stdio.h>
#include<unistd.h>

intmain(intargc,char**argv)
{
printf("pid=%dppid=%d ",getpid(),getppid());

return0;
}

f.c

#include<stdio.h>
#include<unistd.h>

intmain(intargc,char**argv)
{
printf("pid=%dppid=%d ",getpid(),getppid());
execl("./d","d",NULL);

return0;
}

在未執行execl調用之前和執行execl之後pid和ppid完全相同

由此可見execl並沒有創建新的進程

閱讀全文

與execl函數linux相關的資料

熱點內容
pdf的字體怎麼改 瀏覽:856
python讀寫視頻 瀏覽:88
科魯茲壓縮機軸承 瀏覽:353
word文檔轉換成pdf文件找不到 瀏覽:27
組件注冊命令 瀏覽:760
安卓大屏導航用的是什麼運放 瀏覽:443
myandroidtools的備份 瀏覽:900
python爬蟲天氣預報 瀏覽:761
android70許可權管理 瀏覽:749
魔獸辛迪加是什麼伺服器 瀏覽:471
電腦文件夾排序怎麼自定義排序 瀏覽:41
android70機型 瀏覽:422
阿里程序員地位 瀏覽:183
js如何上傳大文件到伺服器地址 瀏覽:685
安卓系統2個卡怎麼切換 瀏覽:182
vivoy9s手機怎麼設置隱私相冊加密 瀏覽:158
android載入網路數據 瀏覽:119
tc語言入門編程 瀏覽:339
載入器app源碼大全 瀏覽:821
linux刷新hosts 瀏覽:620