青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

天下

記錄修行的印記

pipe、dup、dup2、wait、waitpid、fork函數(shù)說明

pipe、dup、dup2、wait、waitpid、fork函數(shù)說明
int pipe(int fd[2]);
功能:創(chuàng)建一個(gè)簡單的管道,若成功則為數(shù)組fd分配兩個(gè)文件描述符,其中fd[
0] 用于讀取管道,fd[1]用于寫入管道。
返回:成功返回0,失敗返回
-1

管道是Linux 支持的最初Unix IPC形式之一,具有以下特點(diǎn):
管道是半雙工的,數(shù)據(jù)只能向一個(gè)方向流動(dòng);需要雙方通信時(shí),需要建立起兩個(gè)管道; 只能用于父子進(jìn)程或者兄弟進(jìn)程之間(具有親緣關(guān)系的進(jìn)程); 單獨(dú)構(gòu)成一種獨(dú)立的文件系統(tǒng):管道對(duì)于管道兩端的進(jìn)程而言,就是一個(gè)文件,但它不是普通的文件,它不屬于某種文件系統(tǒng),而是自立門戶,單獨(dú)構(gòu)成一種文件系 統(tǒng),并且只存在與內(nèi)存中。 數(shù)據(jù)的讀出和寫入:一個(gè)進(jìn)程向管道中寫的內(nèi)容被管道另一端的進(jìn)程讀出。寫入的內(nèi)容每次都添加在管道緩沖區(qū)的末尾,并且每次都是從緩沖區(qū)的頭部讀出數(shù)據(jù)。

但值得我們注意的是:管道它有自身的特點(diǎn)。
 (
1)管道通信是單向的,并且遵守先進(jìn)先出的原則,即先寫入的數(shù)據(jù)先讀出。
 (
2)管道是一個(gè)無結(jié)構(gòu),無固定大小的字節(jié)流。
 (
3)兩個(gè)返回的文件描述符以一種特殊的方式連接起來.寫到fd[1]的數(shù)據(jù)都可以從fd[0]中讀回來.

向管道中寫入數(shù)據(jù)時(shí),linux將不保證寫入的原子性,管道緩沖區(qū)一有空閑區(qū)域,寫進(jìn)程就會(huì)試圖向管道寫入數(shù)據(jù)。如果讀進(jìn)程不讀走管道緩沖區(qū)中的數(shù)據(jù),那么寫操作將一直阻塞。


int dup(int fd) 
復(fù)制一個(gè)存在的文件描述符,返回當(dāng)前可用的最小文件描述符。。。比如當(dāng)前文件描述符已經(jīng)到了100,使用 dup(
100) ,將返回 101 ,101這個(gè)文件描述符擁有100的所有東西,復(fù)制了嘛。。。

int dup2(int fd, int fd2)
是可以指定一個(gè)文件描述符(fd2)來使用,如果fd2已經(jīng)打開,則會(huì)先將其關(guān)閉,如果 fd
==fd2 ,直接返回 fd2 且不關(guān)閉。
實(shí)際上 fcntl 也能完成這2個(gè)函數(shù)的功能,只是對(duì)于 dup2 來說,fcntl 是調(diào)用2個(gè)函數(shù),而 dup2 是一個(gè)原子操作。


dup函數(shù)的作用:復(fù)制一個(gè)現(xiàn)有的句柄,產(chǎn)生一個(gè)與“源句柄特性”完全一樣的新句柄(也即生成一個(gè)新的句柄號(hào),并關(guān)聯(lián)到同一個(gè)設(shè)備)

dup2函數(shù)的作用:復(fù)制一個(gè)現(xiàn)有的句柄到另一個(gè)句柄上,目標(biāo)句柄的特性與“源句柄特性”完全一樣(也即首先關(guān)閉目標(biāo)句柄,與設(shè)備斷連,接著從源句柄完全拷貝復(fù)制到目標(biāo)句柄)


wait和waitpid函數(shù)
頭文件
#include
<sys/types.h>
#include
<sys/wait.h>
函數(shù) pid_t wait (
int * status);
進(jìn)程一旦調(diào)用了 wait,就 立即阻塞自己,由wait自動(dòng)分析是否當(dāng)前進(jìn)程的某個(gè)子進(jìn)程已經(jīng)退出,如果讓它找到了這樣一個(gè)已經(jīng)變成僵尸的子進(jìn)程,wait 就會(huì)收集這個(gè)子進(jìn)程的信息, 并把它徹底銷毀后返回;如果沒有找到這樣一個(gè)子進(jìn)程,wait就會(huì)一直阻塞在這里,直到有一個(gè)出現(xiàn)為止。 
wait(等待子進(jìn)程中斷或結(jié)束)

wait()會(huì)暫時(shí)停止目前進(jìn)程的執(zhí)行,直到有信號(hào)來到或子進(jìn)程結(jié)束。如果在調(diào)用wait()時(shí)子進(jìn)程已經(jīng)結(jié)束,則wait()會(huì)立即返回子進(jìn)程結(jié)束狀態(tài)值。子進(jìn)程的結(jié)束狀態(tài)值會(huì)由參數(shù)status 返回,而子進(jìn)程的進(jìn)程識(shí)別碼也會(huì)一快返回。如果不在意結(jié)束狀態(tài)值,則參數(shù)status 可以設(shè)成NULL。子進(jìn)程的結(jié)束狀態(tài)值請(qǐng)參考waitpid()。
返回值
如果執(zhí)行成功則返回子進(jìn)程識(shí)別碼(PID),如果有錯(cuò)誤發(fā)生則返回
-1。失敗原因存于errno 中。


waitpid(等待子進(jìn)程中斷或結(jié)束)
相關(guān)函數(shù) wait,fork
表頭文件
#include
<sys/types.h>
#include
<sys/wait.h>
定義函數(shù) pid_t waitpid(pid_t pid,
int * status,int options);
函數(shù)說明
waitpid()會(huì)暫時(shí)停止目前進(jìn)程的執(zhí)行,直到有信號(hào)來到或子進(jìn)程結(jié)束。如果在調(diào)用waitpid()時(shí)子進(jìn)程已經(jīng)結(jié)束,則waitpid()會(huì)立即返回子進(jìn)程結(jié)束狀態(tài)值。子進(jìn)程的結(jié)束狀態(tài)值會(huì)由參數(shù)status 返回,而子進(jìn)程的進(jìn)程識(shí)別碼也會(huì)一快返回。如果不在意結(jié)束狀態(tài)值,則參數(shù)status 可以設(shè)成NULL。

參數(shù)pid 為欲等待的子進(jìn)程識(shí)別碼,其他數(shù)值意義如下:
pid
<-1 等待進(jìn)程組識(shí)別碼為pid 絕對(duì)值的任何子進(jìn)程。
pid
=-1 等待任何子進(jìn)程,相當(dāng)于wait()。
pid
=0 等待進(jìn)程組識(shí)別碼與目前進(jìn)程相同的任何子進(jìn)程。
pid
>0 等待任何子進(jìn)程識(shí)別碼為pid 的子進(jìn)程。


目前在Linux中只支持WNOHANG和WUNTRACED兩個(gè)選項(xiàng),
WNOHANG 如果沒有任何已經(jīng)結(jié)束的子進(jìn)程則馬上返回,不予以等待。
WUNTRACED 如果子進(jìn)程進(jìn)入暫停執(zhí)行情況則馬上返回,但結(jié)束狀態(tài)不予以理會(huì)。

如果我們不想使用它們,也可以把options設(shè)為0,如:
ret
=waitpid(-1,NULL,0);

如果使用了WNOHANG參數(shù)調(diào)用waitpid,即使沒有子進(jìn)程退出,它也會(huì)立即返回,不會(huì)像wait那樣永遠(yuǎn)等下去。

而WUNTRACED參數(shù),用于跟蹤調(diào)試,極少用到,就不說了。
查看linux源代碼 unistd.h 我們會(huì)發(fā)現(xiàn),其實(shí) wait 就是經(jīng)過包裝的 waitpid:
static inline pid_t wait(int * wait_stat)
{
    
return waitpid(-1,wait_stat,0);
}

可以用kill函數(shù)殺死子進(jìn)程
kill(childPid,SIGKILL);


子進(jìn)程的結(jié)束狀態(tài)返回后存于status,下面有幾個(gè)宏可判別結(jié)束情況:
WIFEXITED(status)如果子進(jìn)程正常結(jié)束則為非0值。
WEXITSTATUS(status)取得子進(jìn)程exit()返回的結(jié)束代碼,一般會(huì)先用WIFEXITED 來判斷是否正常結(jié)束才能使用此宏。
WIFSIGNALED(status)如果子進(jìn)程是因?yàn)樾盘?hào)而結(jié)束則此宏值為真
WTERMSIG(status) 取得子進(jìn)程因信號(hào)而中止的信號(hào)代碼,一般會(huì)先用WIFSIGNALED 來判斷后才使用此宏。
WIFSTOPPED(status) 如果子進(jìn)程處于暫停執(zhí)行情況則此宏值為真。一般只有使用WUNTRACED 時(shí)才會(huì)有此情況。
WSTOPSIG(status) 取得引發(fā)子進(jìn)程暫停的信號(hào)代碼,一般會(huì)先用WIFSTOPPED 來判斷后才使用此宏。

if (WIFEXITED(status)) 
{
    printf(
"exited, status=%d/n", WEXITSTATUS(status));

else if (WIFSIGNALED(status)) {
    printf(
"killed by signal %d/n", WTERMSIG(status));

else if (WIFSTOPPED(status)) {
    printf(
"stopped by signal %d/n", WSTOPSIG(status));

else if (WIFCONTINUED(status)) {
    printf(
"continued/n");
}

返回值
如果執(zhí)行成功則返回子進(jìn)程識(shí)別碼(PID),如果有錯(cuò)誤發(fā)生則返回
-1。失敗原因存于errno 中。


fork函數(shù)
Create a 
new process

程序段里用了fork();之后程序出了分岔,派生出了兩個(gè)進(jìn)程。具體哪個(gè)先運(yùn)行就看該操作的系統(tǒng)的調(diào)度算法了。
函數(shù)返回2次.
返回值得在子進(jìn)程中pid的值為0,通過getpid可以獲取子進(jìn)程的進(jìn)程id;

返回值:
A value of zero to the child process; and the process ID of the child process to the parent process. 
Both processes 
continue to execute from the fork() function. If an error occurs, fork() returns -1 to the parent and sets errno.

#include 
<sys/types.h>
#include 
<process.h>
int main() 
{
    pid_t pid; 

    puts(
"<1>");
    pid
=fork(); 
    
if (pid < 0) {
        printf(
"error in fork! \r\n"); 
    }
    
else if (pid == 0) {
        printf(
"i am the child process, my process id is %d \r\n",getpid()); 
    }
    
else {
        printf(
"i am the parent process, my process id is %d \r\n",getpid()); 
    }

    puts(
"<2>");
    
return 0;
}

posted on 2012-08-09 14:36 天下 閱讀(2403) 評(píng)論(0)  編輯 收藏 引用 所屬分類: Linux編程

<2012年8月>
2930311234
567891011
12131415161718
19202122232425
2627282930311
2345678

導(dǎo)航

統(tǒng)計(jì)

常用鏈接

留言簿(4)

隨筆分類(378)

隨筆檔案(329)

鏈接

最新隨筆

搜索

最新評(píng)論

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            午夜精品一区二区三区在线视 | 亚洲一区二区三区三| 欧美国产一区二区| 亚洲精选中文字幕| 欧美一进一出视频| 在线日韩电影| 欧美精品一区二区三区蜜桃 | 欧美日韩日本视频| 亚洲欧美日韩另类| 男男成人高潮片免费网站| 亚洲精品乱码久久久久久久久| 欧美色综合网| 久久精品女人天堂| 99在线视频精品| 久久综合九色九九| 一区二区三区欧美视频| 国产午夜精品一区二区三区视频 | 日韩一区二区精品| 久久久久久夜| 一区二区三区日韩欧美精品| 国产欧美日韩在线视频| 免费亚洲视频| 亚洲在线1234| 亚洲国产一成人久久精品| 亚洲欧美激情诱惑| 亚洲人成网站影音先锋播放| 国产精品美女| 欧美极品aⅴ影院| 欧美在线影院在线视频| 日韩视频中文字幕| 欧美aⅴ99久久黑人专区| 亚洲一区二区3| 亚洲国产99| 国产日韩免费| 欧美亚洲成人精品| 欧美成年人网站| 久久精品99国产精品日本| 99视频有精品| 亚洲黄色成人| 免费成人高清| 久久国产精品久久久久久| 一本色道久久综合一区| **欧美日韩vr在线| 国产日本精品| 国产精品美女xx| 欧美三级在线视频| 欧美黄色小视频| 久色婷婷小香蕉久久| 亚洲欧美中日韩| 一区二区三区精品国产| 亚洲国产欧美不卡在线观看| 蜜桃av一区二区| 久久国产精彩视频| 先锋影音一区二区三区| 亚洲一区二区视频| 一二三区精品福利视频| 亚洲精品在线观| 亚洲精品少妇| 亚洲欧洲在线一区| 亚洲国产一区二区三区青草影视 | 久久精品理论片| 欧美一区二区三区男人的天堂| 亚洲午夜精品17c| 亚洲天堂激情| 亚洲大胆视频| 欧美在线播放一区| 亚洲色图制服丝袜| 亚洲视频一区在线观看| 一区二区欧美日韩| 一本大道久久a久久精二百| 亚洲精品久久久一区二区三区| 欧美高清视频一区二区三区在线观看| 久久久噜噜噜久久中文字免| 久久久久网址| 蜜臀99久久精品久久久久久软件| 蜜臀a∨国产成人精品| 女主播福利一区| 亚洲国产精品热久久| 亚洲欧洲视频在线| 一区二区三区久久久| 亚洲一区视频| 久久精品视频亚洲| 免费高清在线一区| 欧美激情综合网| 国产精品热久久久久夜色精品三区 | 欧美日韩国产精品一区| 欧美视频中文一区二区三区在线观看| 国产精品久久777777毛茸茸| 国产日韩欧美夫妻视频在线观看| 国产一区二区精品久久| 亚洲国产精品传媒在线观看| 日韩亚洲精品电影| 亚洲自拍偷拍麻豆| 久久久夜精品| 最新国产成人在线观看| 国产精品99久久久久久人| 久久经典综合| 欧美欧美全黄| 国产欧美在线播放| 亚洲人午夜精品免费| 亚洲永久视频| 欧美成人精品不卡视频在线观看| 亚洲精品久久视频| 午夜精品理论片| 免费人成精品欧美精品| 国产精品麻豆va在线播放| 含羞草久久爱69一区| 在线视频欧美一区| 欧美在线在线| 亚洲高清三级视频| 亚洲在线1234| 欧美aⅴ99久久黑人专区| 欧美久久电影| 精品成人在线视频| 亚洲永久视频| 亚洲国产一区二区三区在线播| 亚洲尤物在线| 欧美精品一区二区三区蜜桃| 国外成人免费视频| 亚洲一区二区综合| 欧美成人蜜桃| 欧美一区二粉嫩精品国产一线天| 欧美久久成人| 亚洲国产精品久久91精品| 性欧美xxxx视频在线观看| 亚洲欧洲午夜| 久久免费视频网| 国产欧美亚洲日本| 亚洲色诱最新| 最新69国产成人精品视频免费| 久久国产精品久久国产精品| 国产精品jvid在线观看蜜臀| 亚洲精品国产精品乱码不99| 久久经典综合| 中文在线一区| 欧美经典一区二区| 亚洲电影激情视频网站| 久久久999成人| 亚洲一区二区三区乱码aⅴ蜜桃女 亚洲一区二区三区乱码aⅴ | 欧美日韩国产在线播放| 亚洲二区视频| 久色成人在线| 久久成人免费日本黄色| 国产伦精品一区二区三区免费 | 欧美一区二区视频观看视频| 欧美色中文字幕| 一区二区三区你懂的| 亚洲国产婷婷香蕉久久久久久99 | 久久九九久久九九| 亚洲已满18点击进入久久| 欧美日韩免费观看中文| 9久草视频在线视频精品| 欧美高清视频免费观看| 狂野欧美一区| 亚洲第一天堂无码专区| 女人天堂亚洲aⅴ在线观看| 久久精品理论片| 伊人一区二区三区久久精品| 久久综合99re88久久爱| 久久精品五月婷婷| 在线看片日韩| 亚洲国产成人不卡| 欧美风情在线观看| 亚洲最新视频在线| 9i看片成人免费高清| 欧美午夜精品伦理| 亚洲欧美日韩视频二区| 亚洲一级特黄| 国产性做久久久久久| 久久性天堂网| 老鸭窝毛片一区二区三区| 91久久视频| 一本久道综合久久精品| 国产精品入口日韩视频大尺度| 欧美一级久久久| 久久精品一本久久99精品| 狠狠色丁香婷婷综合| 亚洲第一网站免费视频| 欧美日韩国产精品一区| 午夜欧美大片免费观看| 亚欧成人在线| 91久久国产综合久久蜜月精品 | 蜜臀va亚洲va欧美va天堂 | 欧美91视频| 欧美精品色综合| 午夜日韩激情| 久久亚洲精品一区二区| 一本一本久久a久久精品综合麻豆 一本一本久久a久久精品牛牛影视 | 欧美成人在线影院| 欧美日韩亚洲视频| 久久精品九九| 欧美激情一区二区三区不卡| 亚洲欧美另类中文字幕| 久久国产精品99国产精| 亚洲乱码精品一二三四区日韩在线 | 亚洲私人影院在线观看| 性欧美大战久久久久久久久| 亚洲经典自拍| 亚洲免费中文字幕| 亚洲国产日韩欧美综合久久|