国产成人精品三级麻豆,色综合天天综合高清网,亚洲精品夜夜夜,国产成人综合在线女婷五月99播放,色婷婷色综合激情国产日韩


Linux下多進(jìn)程編程之fork()函數(shù)語法

分享到:
           

    fork()函數(shù)語法

    表1列出了fork()函數(shù)的語法要點。

表1 fork()函數(shù)語法要點

所需頭文件 #include <sys/types.h> /* 提供類型pid_t的定義 */
#include <unistd.h>
函數(shù)原型 pid_t fork(void)
函數(shù)返回值 0:子進(jìn)程
子進(jìn)程ID(大于0的整數(shù)):父進(jìn)程
-1:出錯

    fork()函數(shù)的簡單示例程序如下:

    int main(void)
    {
        pid_t result;

        /* 調(diào)用fork()函數(shù) */
        result = fork();
        /* 通過result的值來判斷fork()函數(shù)的返回情況,首先進(jìn)行出錯處理 */
        if(result == -1)
        {
            printf("Fork error\n");
        }
        else if (result == 0) /* 返回值為0代表子進(jìn)程 */
        {
            printf("The returned value is %d\n
            In child process!!\nMy PID is %d\n",result,getpid());
        }
        else /* 返回值大于0代表父進(jìn)程 */
        {
            printf("The returned value is %d\n
            In father process!!\nMy PID is %d\n",result,getpid());
        }
        return result;
    }

    將可執(zhí)行程序下載到目標(biāo)板上,運(yùn)行結(jié)果如下:

    $ arm-linux-gcc fork.c –o fork (或者修改Makefile)
    $ ./fork
    The returned value is 76 /* 在父進(jìn)程中打印的信息 */
    In father process!!
    My PID is 75
    The returned value is :0 /* 在子進(jìn)程中打印的信息 */
    In child process!!
    My PID is 76

    從該實例中可以看出,使用fork()函數(shù)新建了一個子進(jìn)程,其中的父進(jìn)程返回子進(jìn)程的進(jìn)程號,而子進(jìn)程的返回值為0。

    由于fork()完整地復(fù)制了父進(jìn)程的整個地址空間,因此執(zhí)行速度是比較慢的。為了加快fork()的執(zhí)行速度,很多UNIX系統(tǒng)設(shè)計者創(chuàng)建了vfork()。vfork()也能創(chuàng)建新進(jìn)程,但它不產(chǎn)生父進(jìn)程的副本。它是通過允許父子進(jìn)程可訪問相同物理內(nèi)存,從而偽裝了對進(jìn)程地址空間的真實復(fù)制,當(dāng)子進(jìn)程需要改變內(nèi)存中的數(shù)據(jù)時才復(fù)制父進(jìn)程。這就是著名的“寫操作時復(fù)制”(copy-on-write)技術(shù)。現(xiàn)在大部分嵌入式Linux系統(tǒng)的fork()函數(shù)調(diào)用已經(jīng)采用vfork()函數(shù)的實現(xiàn)方式,例如uClinux所有的多進(jìn)程管理都通過vfork()來實現(xiàn)。

    本文選自華清遠(yuǎn)見嵌入式培訓(xùn)教材《從實踐中學(xué)嵌入式Linux應(yīng)用程序開發(fā)》

   熱點鏈接:

   1、Linux下多進(jìn)程編程之fork()函數(shù)說明
   2、Linux下多任務(wù)系統(tǒng)之線程介紹
   3、Linux下進(jìn)程的內(nèi)存結(jié)構(gòu)
   4、Linux下進(jìn)程的創(chuàng)建、執(zhí)行和終止
   5、Linux下的進(jìn)程結(jié)構(gòu)

更多新聞>>