日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

文件描述符fd、文件指针fp和vfork()

發布時間:2025/4/5 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 文件描述符fd、文件指针fp和vfork() 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.

  fd:在形式上是一個非負整數.實際上他是一個索引值、指向kernal為每一個進程所維護的該進程打開文件的記錄表.

    當程序打開一個文件或者創建一個新文件的時候kernal向進程返回一個文件描述符。

  優點:兼容POSIX標準,許多系統調用都依賴于它;缺點:不能移植到unix之外的系統上去

  fp:FILE*指針變量標識符

  優點:是C語言的通用格式,便于移植

?

?

2.

  vfork:使用方法同fork差不多,也適用于創建子進程

  vofork特點:

    1)在子進程調用exec或exit之前,它在父進程的空間里運行,會改變父進程的數據段、棧和堆

eg:      

int g_val=0;9 int main()10 {11 pid_t id=vfork();12 if(id<0){13 perror("vfork");14 return 1;15 }16 else if(id==0){//child17 g_val=100;18 printf("child:pid:%d ppid:%d,g_val:%d,&g_val:%p\n",\19 getpid(),getppid(),g_val,&g_val);20 exit(1);21 }22 else{23 printf("father:pid:%d,ppid:%d,g_val:%d,&g_val:%p\n",\24 getpid(),getppid(),g_val,&g_val);25 }26 return 027 }

子進程改變了父進程的值(改變了父進程看到的g_val)

    2)vfork保證子進程先運行 ,在調用了exec()或者exit()之后,父進程才可能被調度運行

pid_t id=vfork();12 if(id<0){13 perror("vfork");14 return 1;15 }16 else if(id==0){//child17 //g_val=100;18 printf("child:pid:%d ppid:%d\n",\19 getpid(),getppid());20 sleep(3); //讓子進程先等待3秒再調用exit21 exit(1);22 }23 else{24 printf("father:pid:%d,ppid:%d\n",\25 getpid(),getppid());26 }

 

結果是:子進程打印,等待3秒(調用了exit),父進程被調度

?

轉載于:https://www.cnblogs.com/JN-PDD/p/6900961.html

總結

以上是生活随笔為你收集整理的文件描述符fd、文件指针fp和vfork()的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。