導航:首頁 > 操作系統 > 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相關的資料

熱點內容
如何在vps上搭建自己的代理伺服器 瀏覽:742
nginxphp埠 瀏覽:401
內臟pdf 瀏覽:150
怎麼看雲伺服器架構 瀏覽:83
我的世界國際服為什麼登不進伺服器 瀏覽:994
微盟程序員老婆 瀏覽:928
intellij創建java 瀏覽:110
java連接odbc 瀏覽:38
啟動修復無法修復電腦命令提示符 瀏覽:359
手機編程是什麼 瀏覽:98
山東移動程序員 瀏覽:163
蘇州java程序員培訓學校 瀏覽:477
單片機液晶驅動 瀏覽:854
魔拆app里能拆到什麼 瀏覽:130
新預演算法的立法理念 瀏覽:144
wdcpphp的路徑 瀏覽:134
單片機p0口電阻 瀏覽:926
瀏覽器中調簡訊文件夾 瀏覽:594
五菱宏光空調壓縮機 瀏覽:68
為什麼app佔用幾百兆 瀏覽:680