国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當(dāng)前位置: 首頁 > news >正文

網(wǎng)站建設(shè)中的html頁面seo網(wǎng)站優(yōu)化培訓(xùn)

網(wǎng)站建設(shè)中的html頁面,seo網(wǎng)站優(yōu)化培訓(xùn),鹽城微信公眾平臺網(wǎng)站制作,wordpress 插件 掃描本篇文章會對進程替換進行講解。希望本篇文章會對你有所幫助 文章目錄 一、進程替換概念 二、進程替換函數(shù) 2、1 execl 2、2 execlp 2、3 execv 2、3 execle 2、4 execve 三、總結(jié) 🙋?♂? 作者:Ggggggtm 🙋?♂? 👀 專欄&…

? 本篇文章會對進程替換進行講解。希望本篇文章會對你有所幫助?

文章目錄

一、進程替換概念

二、進程替換函數(shù)

2、1 execl

2、2 execlp

2、3?execv

2、3?execle

2、4 execve

三、總結(jié)


🙋?♂??作者:@Ggggggtm?🙋?♂?

👀?專欄:Linux從入門到精通? 👀

💥?標(biāo)題:進程控制💥

????寄語:與其忙著訴苦,不如低頭趕路,奮路前行,終將遇到一番好風(fēng)景????

一、進程替換概念

? 我們知道,fork() 創(chuàng)建子進程,子進程的代碼和數(shù)據(jù)是和父進程共享一份的。當(dāng)對任意一個進程修改時,就會發(fā)生寫時拷貝。當(dāng)時我們就想讓子進程執(zhí)行一份全新的代碼呢?那我們可以使用進程替換。

? 程序替換就是使用一個接口來實現(xiàn)的。把磁盤上的可執(zhí)行程序加載到進程的地址空間上??山Y(jié)合下圖理解:

? 進程替換就是把磁盤上的可執(zhí)行程序加載到了內(nèi)存中已經(jīng)在運行的進程中,加載上的新程序會與原來的進程的頁表構(gòu)成新的映射關(guān)系,實際上并沒有創(chuàng)建新的進程。

二、進程替換函數(shù)

2、1 execl

? 我們先來看一下execl()函數(shù)怎么使用,如下圖:

? 第一個參數(shù)是指你所要替換程序的路徑。后面的參數(shù)是要怎么執(zhí)行該程序,是一個可變參數(shù)列表,但是最后一個參數(shù)必須為空。具體使用如下:

#include<stdio.h>    
#include<unistd.h>    
#include<stdlib.h>    int main()    
{    printf("hello linux\n");    execl("/usr/bin/ls","ls","-l",NULL);                                                                                                                     printf("hello linux\n");    exit(111);    return 0;    
}  

? 我們看如下運行結(jié)果:

? 確實執(zhí)行了ls -l 的命令,但是并沒有往下接著執(zhí)行打印和退出!!!怎么沒有打印呢?execl是程序替換,調(diào)用該函數(shù)后,會將當(dāng)前的進程所有代碼和數(shù)據(jù)進行替換。所以一旦調(diào)用成功,后續(xù)的代碼將不會在被執(zhí)行。

??exec()系列函數(shù)在成功時不會返回,只有在發(fā)生錯誤時才會返回-1。這是因為當(dāng)exec()函數(shù)成功地加載新的可執(zhí)行程序后,它會在當(dāng)前進程上下文中完全替換掉當(dāng)前進程的映像,包括代碼、數(shù)據(jù)、堆棧等。這使得原先的進程狀態(tài)被新的可執(zhí)行程序取代,所以在成功加載新程序后,舊程序不再存在,也就無法進行返回操作了。

2、2 execlp

? execlp函數(shù)對比execl函數(shù),就是所要替換的程序可以自己不帶路徑。execlp中的 p 指的意思是環(huán)境變量PATH,可以默認(rèn)去找所要替換的程序路徑。代碼如下:

  #include<stdio.h>    #include<unistd.h>    #include<stdlib.h>    int main()    {    printf("hello linux\n");    //execl("/usr/bin/ls","ls","-l",NULL);    execlp("ls","ls","-l","-a",NULL);                                                                                                                      printf("hello linux\n");        exit(111);                      return 0;                       } 

? 運行結(jié)果如下:

2、3?execv

? 我們再來看一下execv函數(shù)的使用。如下圖:

? 其實對比execl函數(shù)不難發(fā)現(xiàn),l 表示list的意思,也就是參數(shù)列表一個一個列出來。execv函數(shù)中的 v 表示vector,參數(shù)列表是一個數(shù)組。我們可看如下代碼:

  #include<stdio.h>    #include<unistd.h>    #include<stdlib.h>    char* const _argv[]={"ls","-l","-a",NULL};                                                                                                                 int main()    {    printf("hello linux\n");    //execl("/usr/bin/ls","ls","-l",NULL);    execv("/usr/bin/ls",_argv);    printf("hello linux\n");    exit(111);    return 0;    } 

? ?運行結(jié)果如下:

2、3?execle

? 我們這里就不再解釋execvp了,對比上述講到很容易理解。直接看execle函數(shù)。我們先看execle函數(shù)怎么使用:

? 其實我們也不難發(fā)現(xiàn),對比execl函數(shù),參數(shù)列表最后多出來一個指針數(shù)組。這個指針數(shù)組就是維護的環(huán)境變量。為了更好的演示該函數(shù),我們先寫一下一個我們自己生成的可執(zhí)行程序去調(diào)用我們另一個自己生成的可執(zhí)行程序。代碼如下:

//“————————————————myexec.c————————————————————”#include<stdio.h>    #include<unistd.h>    #include<stdlib.h>    const char* myflie="/home/gtm/primer/test/test_7_23/mycmd";    int main(int argc,char* argv[],char* env[])                                                                                                                {    printf("hello linux\n");    //execl("/usr/bin/ls","ls","-l",NULL);    //execlp("ls","ls","-l","-a",NULL);    execle(myflie,"mycmd","-a",NULL,env);    //execv("/usr/bin/ls",_argv);    return 0;    }  //“————————————————mycmd.c————————————————————”
#include <stdio.h>
#include <string.h>
#include <stdlib.h>// ./mycmd -a/-b/-c...
int main(int argc, char *argv[])
{if(argc != 2){printf("can not execute!\n");exit(1);}//MY_105_VAL: 目前并不存在!printf("獲取環(huán)境變量: hello: %s\n", getenv("hello"));if(strcmp(argv[1], "-a") == 0)                                            {                                                                         printf("hello a!\n");                                                 }                                                                         else if(strcmp(argv[1], "-b") == 0)                                       {                                                                         printf("hello b!\n");                                                 }                                                                                                                                                        else{                                                                     printf("default!\n");                                                 }                                                                                      return 0;                                                                 
}

? 上述代碼是在不同的源文件,上述代碼中有所標(biāo)述。我們想要的就是用myexec去調(diào)用mycmd。我們在mycmd中想要獲取環(huán)境變量 hello 的值,但是哦我們并沒有設(shè)置。所以環(huán)境變量hello的值為null。我們看運行結(jié)果:

? 但是我們要在myexec中設(shè)置了hello環(huán)境變量,

  #include<stdio.h>    #include<unistd.h>    #include<stdlib.h>    const char* myflie="/home/gtm/primer/test/test_7_23/mycmd";    int main(int argc,char* argv[],char* env[])    {    printf("hello linux\n");    //execl("/usr/bin/ls","ls","-l",NULL);    //execlp("ls","ls","-l","-a",NULL);    const char* _env[]={"hello=20230724",NULL};    execle(myflie,"mycmd","-a",NULL,_env);                                                                                                                 //execv("/usr/bin/ls",_argv);    return 0;    }    

? 我們再來看運行結(jié)果:

? 當(dāng)然,環(huán)境變量hello就可以獲取相應(yīng)的值。?

2、4 execve

? execve函數(shù)是屬于系統(tǒng)調(diào)用函數(shù)。我們上述講到的,如下圖:

? 都是語言級別的函數(shù),底層封裝的都是execve函數(shù)。事實上,只有execve是真正的系統(tǒng)調(diào)用,其它五個函數(shù)最終都調(diào)用 execve。為什么還要封裝呢?直接使用execve多好啊。原因是封裝后,我們也可以很直接的感受到,應(yīng)用的場景變多了。其次是用起來,見名知其意。

三、總結(jié)

???在C++中,exec()系列函數(shù)提供了一種在程序中執(zhí)行外部命令或可執(zhí)行文件的方法。這些函數(shù)包括:execvp()、execv()、execvpe()、execlp()、execl()、execle()和execve()。

  1. execvp()函數(shù):

    • 原型:int execvp(const char *file, char *const argv[]);
    • 功能:用于在指定的文件路徑中搜索可執(zhí)行文件,并用指定的參數(shù)列表運行該文件。
    • 優(yōu)點:可以直接使用文件名作為參數(shù),而無需提供文件路徑。
    • 返回值:如果函數(shù)執(zhí)行成功,則不會返回任何值;如果函數(shù)執(zhí)行失敗,則會返回-1。
  2. execv()函數(shù):

    • 原型:int execv(const char *path, char *const argv[]);
    • 功能:在指定的文件路徑中搜索可執(zhí)行文件并用指定的參數(shù)列表運行該文件。
    • 優(yōu)點:需要提供文件路徑,因此可以明確指定要執(zhí)行的文件的位置。
    • 返回值:如果函數(shù)執(zhí)行成功,則不會返回任何值;如果函數(shù)執(zhí)行失敗,則會返回-1。
  3. execvpe()函數(shù):

    • 原型:int execvpe(const char *file, char *const argv[], char *const envp[]);
    • 功能:在指定的文件路徑和環(huán)境變量中搜索可執(zhí)行文件,并用指定的參數(shù)列表運行該文件。
    • 優(yōu)點:除了搜索文件路徑外,還可以指定環(huán)境變量。
    • 返回值:如果函數(shù)執(zhí)行成功,則不會返回任何值;如果函數(shù)執(zhí)行失敗,則會返回-1。
  4. execlp()函數(shù):

    • 原型:int execlp(const char *file, const char *arg, ...);
    • 功能:在系統(tǒng)的環(huán)境變量所指定的路徑中搜索可執(zhí)行文件并用指定的參數(shù)列表運行該文件。
    • 優(yōu)點:可以直接使用文件名和參數(shù)作為參數(shù),而無需提供文件路徑。
    • 返回值:如果函數(shù)執(zhí)行成功,則不會返回任何值;如果函數(shù)執(zhí)行失敗,則會返回-1。
  5. execl()函數(shù):

    • 原型:int execl(const char *path, const char *arg, ...);
    • 功能:在指定的文件路徑中搜索可執(zhí)行文件并用指定的參數(shù)列表運行該文件。
    • 優(yōu)點:需要提供文件路徑和參數(shù),因此可以明確指定要執(zhí)行的文件的位置和所需的參數(shù)。
    • 返回值:如果函數(shù)執(zhí)行成功,則不會返回任何值;如果函數(shù)執(zhí)行失敗,則會返回-1。
  6. execle()函數(shù):

    • 原型:int execle(const char *path, const char *arg, ..., char *const envp[]);
    • 功能:在指定的文件路徑和環(huán)境變量中搜索可執(zhí)行文件,并用指定的參數(shù)列表運行該文件。
    • 優(yōu)點:除了搜索文件路徑外,還可以指定環(huán)境變量。
    • 返回值:如果函數(shù)執(zhí)行成功,則不會返回任何值;如果函數(shù)執(zhí)行失敗,則會返回-1。
  7. execve()函數(shù):

    • 原型:int execve(const char *filename, char *const argv[], char *const envp[]);
    • 功能:在指定的文件路徑和環(huán)境變量中搜索可執(zhí)行文件,并用指定的參數(shù)列表運行該文件。
    • 優(yōu)點:需要提供文件路徑和參數(shù),以及環(huán)境變量,因此可以明確指定要執(zhí)行的文件的位置、所需的參數(shù)和運行環(huán)境。
    • 返回值:如果函數(shù)執(zhí)行成功,則不會返回任何值;如果函數(shù)執(zhí)行失敗,則會返回-1。

? exec()系列函數(shù)允許程序在運行時調(diào)用其他可執(zhí)行文件,以實現(xiàn)更復(fù)雜的功能。這些函數(shù)提供了不同的方式來指定可執(zhí)行文件的路徑、傳遞參數(shù)和設(shè)置環(huán)境變量,根據(jù)具體的需求,可以選擇合適的函數(shù)來使用。請注意,exec()函數(shù)族在執(zhí)行成功后,會將當(dāng)前進程替換為新的進程,因此之后的代碼不會被執(zhí)行到。

http://m.aloenet.com.cn/news/44631.html

相關(guān)文章:

  • 2018年網(wǎng)站建設(shè)做搜索引擎推廣多少錢
  • 網(wǎng)站建站客戶需求表單鄭州網(wǎng)站制作選擇樂云seo
  • 做網(wǎng)站最主要是什么招聘seo專員
  • 建設(shè)銀行澳洲招聘網(wǎng)站最新足球消息
  • 禪城網(wǎng)站建設(shè)報價it培訓(xùn)課程
  • wordpress文件的完整url地址seo是什么意思啊
  • 響應(yīng)式網(wǎng)站的制作網(wǎng)站制作百度大數(shù)據(jù)查詢平臺
  • 貴陽網(wǎng)站推廣網(wǎng)絡(luò)營銷策劃推廣方案
  • cad培訓(xùn)班一般學(xué)費多少深圳網(wǎng)站設(shè)計專家樂云seo
  • c語言除了做網(wǎng)站還能干什么廣州疫情升級
  • 網(wǎng)站建設(shè)公司六安網(wǎng)站seo方案
  • 龍巖網(wǎng)站建設(shè)全包sem和seo是什么職業(yè)
  • 中企動力做過的網(wǎng)站女教師遭網(wǎng)課入侵視頻
  • wordpress獲取當(dāng)前目錄父目錄id吉林seo管理平臺
  • 縣文化館網(wǎng)站建設(shè)方案市場調(diào)研報告1000字
  • 哪些網(wǎng)站做ip向小說神秘網(wǎng)站
  • 央視新聞seo的五個步驟
  • 尋找徐州網(wǎng)站開發(fā)企業(yè)網(wǎng)絡(luò)營銷青島
  • 深圳廣告公司前十強seo簡單速排名軟件
  • 單頁網(wǎng)站在線制作公司搜索seo
  • 做網(wǎng)站上哪買空間鄭州seo顧問外包公司
  • 書畫網(wǎng)站模板下載跨境電商seo什么意思
  • 網(wǎng)絡(luò)營銷的方法包括哪些重慶seo是什么
  • wordpress 子主題路由seo沒什么作用了
  • 素材網(wǎng)站源碼成品視頻直播軟件推薦哪個好一點
  • 如何仿造一個網(wǎng)站做廣州網(wǎng)絡(luò)廣告推廣公司
  • 企業(yè)網(wǎng)站 手機網(wǎng)站 app 微網(wǎng)站廣州網(wǎng)站建設(shè)系統(tǒng)
  • wordpress is_mobile上海關(guān)鍵詞排名優(yōu)化公司
  • 制作類網(wǎng)站seo人才招聘
  • 建站abc做的網(wǎng)站穩(wěn)定營銷方案包括哪些內(nèi)容