- 論壇徽章:
- 0
|
之前我對于標(biāo)準(zhǔn)I / O的理解是,在系統(tǒng)輸入輸出fd的基礎(chǔ)上,做一個C語言運(yùn)行時庫的包裝,因此fclose(stdout)應(yīng)該是關(guān)閉了stdout這個"流",而系統(tǒng)的STDOUT_FILENO應(yīng)該沒有被關(guān)閉。
但是我測試了一下,如下:
- #include<stdio.h>
- #include<stdlib.h>
- #include<unistd.h>
- int main()
- {
- size_t w = fwrite("hw\n", 3, 1, stdout);
- fclose(stdout);
- write(STDOUT_FILENO, "again\n", 3);
- return 0;
- }
復(fù)制代碼 結(jié)果是只打印了hw一次,并沒有打印again。這是為什么呢,和我的預(yù)期有點不一致啊。fclose(stdout)不僅僅是在C運(yùn)行時庫這一層起了作用,看起來還影響了系統(tǒng)的底層行為。這樣的話,C運(yùn)行時庫的I/O流就不僅僅是一個包裝了,它本身的狀態(tài)也影響了系統(tǒng)API的調(diào)用?
求解釋! |
|