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

Chinaunix

標(biāo)題: fclose(stdout)關(guān)閉的到底是C標(biāo)準(zhǔn)庫(kù)的流,還是系統(tǒng)的fd? [打印本頁]

作者: centos_71    時(shí)間: 2015-01-25 12:15
標(biāo)題: fclose(stdout)關(guān)閉的到底是C標(biāo)準(zhǔn)庫(kù)的流,還是系統(tǒng)的fd?
之前我對(duì)于標(biāo)準(zhǔn)I / O的理解是,在系統(tǒng)輸入輸出fd的基礎(chǔ)上,做一個(gè)C語言運(yùn)行時(shí)庫(kù)的包裝,因此fclose(stdout)應(yīng)該是關(guān)閉了stdout這個(gè)"流",而系統(tǒng)的STDOUT_FILENO應(yīng)該沒有被關(guān)閉。
但是我測(cè)試了一下,如下:

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<unistd.h>
  4. int main()
  5. {
  6.     size_t w = fwrite("hw\n", 3, 1, stdout);
  7.     fclose(stdout);
  8.     write(STDOUT_FILENO, "again\n", 3);
  9.     return 0;
  10. }
復(fù)制代碼
結(jié)果是只打印了hw一次,并沒有打印again。這是為什么呢,和我的預(yù)期有點(diǎn)不一致啊。fclose(stdout)不僅僅是在C運(yùn)行時(shí)庫(kù)這一層起了作用,看起來還影響了系統(tǒng)的底層行為。這樣的話,C運(yùn)行時(shí)庫(kù)的I/O流就不僅僅是一個(gè)包裝了,它本身的狀態(tài)也影響了系統(tǒng)API的調(diào)用?
求解釋!
作者: MMMIX    時(shí)間: 2015-01-25 15:52
回復(fù) 1# centos_71


    fclose 本身就是那么個(gè)行為,人家也沒說不會(huì)影響系統(tǒng)的狀態(tài)。
作者: 爻易    時(shí)間: 2015-01-26 08:27
centos_71 發(fā)表于 2015-01-25 12:15
之前我對(duì)于標(biāo)準(zhǔn)I / O的理解是,在系統(tǒng)輸入輸出fd的基礎(chǔ)上,做一個(gè)C語言運(yùn)行時(shí)庫(kù)的包裝,因此fclose(stdout) ...


這么理解也不錯(cuò)!fclose封裝了系統(tǒng)調(diào)用close(fd),只是另外還做了釋放緩沖的事。
作者: super皮波    時(shí)間: 2015-01-26 09:52
標(biāo)準(zhǔn)庫(kù)io中加了一層上層的緩沖,其他的就是封裝
作者: linux_c_py_php    時(shí)間: 2015-01-28 11:15
都是FILE*,fclose管你里面是哪個(gè)fd。




歡迎光臨 Chinaunix (http://www.72891.cn/) Powered by Discuz! X3.2