亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
最近訪問(wèn)板塊 發(fā)新帖
查看: 2932 | 回復(fù): 8
打印 上一主題 下一主題

[C] 子進(jìn)程exit之后是否一定關(guān)閉所有I/O流?? [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2016-04-08 16:24 |只看該作者 |倒序?yàn)g覽
我在我的centos6.5系統(tǒng)中運(yùn)行《UNIX環(huán)境高級(jí)編程》書中一個(gè)程序?yàn)楹谓Y(jié)果跟書上說(shuō)的不一樣?#include "apue.h"

int        globvar = 6;        /* external variable in initialized data */

int
main(void)
{
    int        var;        /* automatic variable on the stack */
    pid_t    pid;

    var = 88;
    printf("before vfork\n");    /* we don't flush stdio */
    if ((pid = vfork()) < 0) {
        err_sys("vfork error");
    } else if (pid == 0) {        /* child */
        globvar++;                /* modify parent's variables */
        var++;
        exit(0);                /* child terminates */
    }

    /* parent continues here */
    printf("pid = %ld, glob = %d, var = %d\n", (long)getpid(), globvar,
      var);
    exit(0);
}
書上說(shuō)子進(jìn)程中的exit(0)會(huì)導(dǎo)致父進(jìn)程中的標(biāo)準(zhǔn)輸出流被關(guān)閉,所以運(yùn)行結(jié)果并不打印出進(jìn)程ID,globvar,var的值
而實(shí)際運(yùn)行的結(jié)果是會(huì)打印的,難道關(guān)閉了流以后,父進(jìn)程又會(huì)自動(dòng)打開標(biāo)準(zhǔn)輸出流嗎?

論壇徽章:
0
2 [報(bào)告]
發(fā)表于 2016-04-08 16:24 |只看該作者
#include "apue.h"

static void charatatime(char *);

int
main(void)
{
    pid_t    pid;

    if ((pid = fork()) < 0) {
        err_sys("fork error");
    } else if (pid == 0) {
        charatatime("output from child\n");
    } else {
        charatatime("output from parent\n");
    }
    exit(0);
}

static void
charatatime(char *str)
{
    char    *ptr;
    int        c;

    setbuf(stdout, NULL);            /* set unbuffered */
    for (ptr = str; (c = *ptr++) != 0; )
        putc(c, stdout);
}


這個(gè)程序也沒(méi)出現(xiàn)竟態(tài)條件而導(dǎo)致輸出混亂
實(shí)際輸出是:
$ ./a
output from parent
output from child

論壇徽章:
44
15-16賽季CBA聯(lián)賽之浙江
日期:2021-10-11 02:03:59程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-07-02 06:20:0015-16賽季CBA聯(lián)賽之新疆
日期:2016-04-25 10:55:452016科比退役紀(jì)念章
日期:2016-04-23 00:51:2315-16賽季CBA聯(lián)賽之山東
日期:2016-04-17 12:00:2815-16賽季CBA聯(lián)賽之福建
日期:2016-04-12 15:21:2915-16賽季CBA聯(lián)賽之遼寧
日期:2016-03-24 21:38:2715-16賽季CBA聯(lián)賽之福建
日期:2016-03-18 12:13:4015-16賽季CBA聯(lián)賽之佛山
日期:2016-02-05 00:55:2015-16賽季CBA聯(lián)賽之佛山
日期:2016-02-04 21:11:3615-16賽季CBA聯(lián)賽之天津
日期:2016-11-02 00:33:1215-16賽季CBA聯(lián)賽之浙江
日期:2017-01-13 01:31:49
3 [報(bào)告]
發(fā)表于 2016-04-08 16:41 |只看該作者
子進(jìn)程關(guān)閉的是子進(jìn)程的流,父進(jìn)程的流還開著。

論壇徽章:
11
未羊
日期:2013-12-16 12:45:4615-16賽季CBA聯(lián)賽之青島
日期:2016-04-11 19:17:4715-16賽季CBA聯(lián)賽之廣夏
日期:2016-04-06 16:34:012015亞冠之卡爾希納薩夫
日期:2015-11-10 10:04:522015亞冠之大阪鋼巴
日期:2015-07-30 18:29:402015亞冠之城南
日期:2015-06-15 17:56:392015亞冠之卡爾希納薩夫
日期:2015-05-15 15:19:272015亞冠之山東魯能
日期:2015-05-14 12:38:13金牛座
日期:2014-12-04 15:34:06子鼠
日期:2014-10-16 13:40:4715-16賽季CBA聯(lián)賽之八一
日期:2016-07-22 09:41:40
4 [報(bào)告]
發(fā)表于 2016-04-08 18:44 |只看該作者
本帖最后由 zylthinking 于 2016-04-08 18:50 編輯
fmjz_qs214 發(fā)表于 2016-04-08 16:24
我在我的centos6.5系統(tǒng)中運(yùn)行《UNIX環(huán)境高級(jí)編程》書中一個(gè)程序?yàn)楹谓Y(jié)果跟書上說(shuō)的不一樣?#include "apue. ...


這個(gè)和 vfork 無(wú)關(guān), 和 stdout 及 exit 有關(guān);
vfork 會(huì)對(duì) CLONE_FILES, 因此, 子進(jìn)程擁有自己的 fd, 但又沒(méi)有復(fù)制內(nèi)存, 因此共用父進(jìn)程的 stdout;

子進(jìn)程 exit 是會(huì)關(guān)掉 stdout, 但 stdout 指向的 fd 確實(shí)子進(jìn)程自己的, 關(guān)不掉父進(jìn)程的;
APUE 這么說(shuō), 有一定道理在于它說(shuō)的并不單單是 linux, 就算是 linux, 也未必是一個(gè) glibc;
父進(jìn)程引用 stdout 就可能會(huì)崩潰, 也可能寫不去, 也可能就是似乎一切正常;這個(gè)要看 exit 會(huì)將 stdout 指向的內(nèi)存破壞到什么程度。
如果最單純的, 什么事也沒(méi)做, 只是關(guān)閉了 fd, 或者 free 掉 stdout, 但沒(méi)有對(duì)該內(nèi)存中的內(nèi)容做任何寫, 那么其實(shí)和沒(méi) free 沒(méi)什么區(qū)別, 那么父進(jìn)程 printf 是可以成功的, 因?yàn)殛P(guān)鍵的 fd 其實(shí)是父進(jìn)程自己私有的

論壇徽章:
11
未羊
日期:2013-12-16 12:45:4615-16賽季CBA聯(lián)賽之青島
日期:2016-04-11 19:17:4715-16賽季CBA聯(lián)賽之廣夏
日期:2016-04-06 16:34:012015亞冠之卡爾希納薩夫
日期:2015-11-10 10:04:522015亞冠之大阪鋼巴
日期:2015-07-30 18:29:402015亞冠之城南
日期:2015-06-15 17:56:392015亞冠之卡爾希納薩夫
日期:2015-05-15 15:19:272015亞冠之山東魯能
日期:2015-05-14 12:38:13金牛座
日期:2014-12-04 15:34:06子鼠
日期:2014-10-16 13:40:4715-16賽季CBA聯(lián)賽之八一
日期:2016-07-22 09:41:40
5 [報(bào)告]
發(fā)表于 2016-04-08 18:49 |只看該作者
回復(fù) 2# fmjz_qs214

競(jìng)態(tài)只是可能出現(xiàn); 很顯然是你和他無(wú)緣嘛


   

論壇徽章:
0
6 [報(bào)告]
發(fā)表于 2016-04-08 19:48 |只看該作者
本帖最后由 fmjz_qs214 于 2016-04-08 19:52 編輯

回復(fù) 4# zylthinking
懂了,謝謝高手的解答,您的意思就是在fd存在的情況下有的實(shí)現(xiàn)還可以使用printf的。
另外第二個(gè)問(wèn)題,我試驗(yàn)過(guò)很多次了都是同樣的結(jié)果,應(yīng)該不是運(yùn)氣問(wèn)題,我估計(jì)可能那個(gè)本比較老了,新的系統(tǒng)實(shí)現(xiàn)有什么機(jī)制抑制這種競(jìng)態(tài)了吧?


   

論壇徽章:
44
15-16賽季CBA聯(lián)賽之浙江
日期:2021-10-11 02:03:59程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-07-02 06:20:0015-16賽季CBA聯(lián)賽之新疆
日期:2016-04-25 10:55:452016科比退役紀(jì)念章
日期:2016-04-23 00:51:2315-16賽季CBA聯(lián)賽之山東
日期:2016-04-17 12:00:2815-16賽季CBA聯(lián)賽之福建
日期:2016-04-12 15:21:2915-16賽季CBA聯(lián)賽之遼寧
日期:2016-03-24 21:38:2715-16賽季CBA聯(lián)賽之福建
日期:2016-03-18 12:13:4015-16賽季CBA聯(lián)賽之佛山
日期:2016-02-05 00:55:2015-16賽季CBA聯(lián)賽之佛山
日期:2016-02-04 21:11:3615-16賽季CBA聯(lián)賽之天津
日期:2016-11-02 00:33:1215-16賽季CBA聯(lián)賽之浙江
日期:2017-01-13 01:31:49
7 [報(bào)告]
發(fā)表于 2016-04-08 20:31 |只看該作者
回復(fù) 5# zylthinking

竟態(tài)不會(huì)出現(xiàn),因?yàn)閱未紊儆赑IPE_BUF個(gè)字節(jié)的write是原子操作。stdout缺省是帶buffer的,printf直到回車才會(huì)做一次fflush。

論壇徽章:
0
8 [報(bào)告]
發(fā)表于 2016-04-08 21:12 |只看該作者
回復(fù) 7# windoze


   謝謝了, 對(duì)這塊我還沒(méi)弄透,我還是要要往后看看

論壇徽章:
6
2015年辭舊歲徽章
日期:2015-03-05 16:13:092015年迎新春徽章
日期:2015-03-05 16:13:092015小元宵徽章
日期:2015-03-06 15:58:1815-16賽季CBA聯(lián)賽之浙江
日期:2016-11-05 14:38:4115-16賽季CBA聯(lián)賽之新疆
日期:2016-11-11 18:38:06
9 [報(bào)告]
發(fā)表于 2016-04-09 11:01 |只看該作者
輸入輸出流是庫(kù)函數(shù)提供的功能,也由庫(kù)函數(shù)負(fù)責(zé)關(guān)閉它。
所以會(huì)存在兩種關(guān)閉函數(shù):操作系統(tǒng)調(diào)用級(jí)與庫(kù)函數(shù)級(jí)
庫(kù)函數(shù)是對(duì)系統(tǒng)調(diào)用的再包裝
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過(guò)ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP