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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

close on exec标志位

發(fā)布時(shí)間:2025/3/15 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 close on exec标志位 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

首先說明下文件描述符,文件描述符標(biāo)志,文件狀態(tài)標(biāo)志的區(qū)別:
? ? 文件描述符:標(biāo)識(shí)文件用的;
? ? 文件描述符標(biāo)志(目前就只有一個(gè)close-on-exec):僅僅是一個(gè)標(biāo)志,當(dāng)進(jìn)程fork一個(gè)子進(jìn)程的時(shí)候,在子進(jìn)程中調(diào)用了exec函數(shù)時(shí)就用到了該標(biāo)志。意義是執(zhí)行exec前是否要關(guān)閉這個(gè)文件描述符;
? ? 文件狀態(tài)標(biāo)志:是在系統(tǒng)文件表中,關(guān)于write、read等標(biāo)志。

? ? close_on_exec 是一個(gè)進(jìn)程所有文件描述符(文件句柄)的位圖標(biāo)志,每個(gè)比特位代表一個(gè)打開的文件描述符,用于確定在調(diào)用系統(tǒng)調(diào)用execve()時(shí)需要關(guān)閉的文件句柄(參見include/fcntl.h)。當(dāng)一個(gè)程序使用fork()函數(shù)創(chuàng)建了一個(gè)子進(jìn)程時(shí),通常會(huì)在該子進(jìn)程中調(diào)用execve()函數(shù)加載執(zhí)行另一個(gè)新程序。此時(shí)子進(jìn)程將完全被新程序替換掉,并在子進(jìn)程中開始執(zhí)行新程序。若一個(gè)文件描述符在close_on_exec中的對應(yīng)比特位被設(shè)置,那么在執(zhí)行execve()時(shí)該描述符將被關(guān)閉,否則該描述符將始終處于打開狀態(tài)。

? ? 當(dāng)打開一個(gè)文件時(shí),默認(rèn)情況下文件句柄在子進(jìn)程中也處于打開狀態(tài)。因此sys_open()中要復(fù)位對應(yīng)比特位。

? ? 設(shè)置close on exec標(biāo)志可通過fcntl(fd, F_SETFD, flags | FD_CLOEXEC)來進(jìn)行設(shè)置,當(dāng)然flags可先通過F_GETFD獲得。

? ? close on exec標(biāo)志可有如下三個(gè)用途:

? ? 1、如果調(diào)用了exec(),應(yīng)該關(guān)閉指定的套接字;

? ? 2、如果設(shè)置了此選項(xiàng),則連接監(jiān)聽器設(shè)置所涉及的監(jiān)聽器套接字以close-on-exec標(biāo)志;

? ? 3、一般我們會(huì)調(diào)用exec執(zhí)行另一個(gè)程序,此時(shí)會(huì)用全新的程序替換子進(jìn)程的正文,數(shù)據(jù),堆和棧等。此時(shí)保存文件描述符的變量當(dāng)然也不存在了,我們就無法關(guān)閉無用的文件描述符了。所以通常我們會(huì)fork子進(jìn)程后在子進(jìn)程中直接執(zhí)行close關(guān)掉無用的文件描述符,然后再執(zhí)行exec。

總結(jié)

以上是生活随笔為你收集整理的close on exec标志位的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。