亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 操作系統 > 正文

標準I/O之實現細節

2024-06-28 13:28:41
字體:
來源:轉載
供稿:網友
標準I/O之實現細節

在UNIX系統中,標準I/O庫最終都要調用文件I/O(read、write等)。每個標準I/O流都有一個與其相關聯的文件描述符,可以對一個流調用fileno函數以獲得其描述符。

注意,fileno不是ISO C標準部分,而是POSIX.1支持的擴展。

#include <stdio.h>int fileno( FILE *fp );返回值:與該流相關聯的文件描述符

如果要調用dup或fcntl等函數,則需要此函數。

為了了解你所使用的系統中標準I/O庫的實現,最好從頭文件<stdio.h>開始。從中可以看到:FILE對象是如何定義的、每個流標志的定義以及定義為宏的各個標準I/O例程(例如getc)。

程序清單5-3中的程序為三個標準流以及一個普通文件相關聯的流打印有關緩沖的狀態信息。

程序清單5-3 對各個標準I/O流打印緩沖狀態信息

[root@localhost apue]# cat PRog5-3.c#include "apue.h"void pr_stdio( const char *, FILE * );int main( void ){        FILE *fp;        fputs( "enter any character/n", stdout );        if( getchar() == EOF )                err_sys( "getchar error" );        fputs( "one line to standard error/n", stderr );        pr_stdio( "stdin", stdin );        pr_stdio( "stdout", stdout );        pr_stdio( "stderr", stderr );        if(( fp = fopen("/etc/mtab", "r")) == NULL)                err_sys("fopen error");        if(getc(fp) == EOF)                err_sys("getc error");        pr_stdio("/etc/mtab", fp);        exit(0);}voidpr_stdio(const char *name, FILE *fp){        printf("stream = %s, ", name);        /*        * The following is nonportable.        */        if(fp->_IO_file_flags & _IO_UNBUFFERED)                printf("unbuffered");        else if(fp->_IO_file_flags & _IO_LINE_BUF)                printf("line buffered");        else    /* if neither of above */                printf("fully buffered");        printf(", buffer size = %d/n", fp->_IO_buf_end - fp->_IO_buf_base);}

注意,在打印緩沖狀態信息之前,先對每個流執行I/O操作,第一個I/O操作通常就造成為該流分配緩沖。結構成員_IO_file_flags、_IO_buf_base、_IO_buf_end和常量_IO_UNBUFFERED、_IO_LINE_BUFFERED是由linux中的GNU標準I/O庫定義的。應當了解,其他UNIX系統可能會有不同的標準I/O庫實現。

如果運行程序清單5-3中的程序兩次,一次使三個標準流與終端相連接,另一次使它們重定向到普通文件,則所得結果是:

[root@localhost apue]# ./prog5-3    stdin、stdout和stderr都連至終端enter any character                鍵入換行符one line to standard errorstream = stdin, line buffered, buffer size = 4096stream = stdout, line buffered, buffer size = 4096stream = stderr, unbuffered, buffer size = 1stream = /etc/mtab, fully buffered, buffer size = 4096[root@localhost apue]# ./prog5-3 < /etc/termcap > std.out 2> std.err                三個流都重定向,再次運行該程序[root@localhost apue]# cat std.errone line to standard error[root@localhost apue]# cat std.outenter any characterstream = stdin, fully buffered, buffer size = 4096stream = stdout, fully buffered, buffer size = 4096stream = stderr, unbuffered, buffer size = 1stream = /etc/mtab, fully buffered, buffer size = 4096

從中可見,該系統的默認情況是:當標準輸入、輸出連至終端時,它們是行緩沖的。行緩沖的長度是4096字節。注意,這并沒有將輸入、輸出的行長限制為4096字節,這只是緩沖區的長度。如果要將8192字節的行寫到標準輸出,則要進行兩次write系統調用。當將這兩個流重定向到普通文件時,它們就變成是全緩沖的,其緩沖區長度是該文件系統優先選用的I/O長度(從stat結構中得到的st_blksize值)。從中也可看到,標準出錯如它所應該的那樣是非緩沖的,而普通文件按系統默認是全緩沖的。

本篇博文內容摘自《UNIX環境高級編程》(第二版),僅作個人學習記錄所用。關于本書可參考:http://www.apuebook.com/


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲四色影视在线观看| 成人免费大片黄在线播放| 精品国产一区二区三区久久| 亚洲天堂视频在线观看| 亚洲精选一区二区| 2019亚洲日韩新视频| 国产亚洲欧美日韩一区二区| 久久视频在线免费观看| 亚洲国产日韩欧美在线图片| 一区二区亚洲欧洲国产日韩| 在线播放国产一区二区三区| 久久精品亚洲94久久精品| 日韩中文字幕在线播放| 亚洲天堂视频在线观看| 麻豆国产精品va在线观看不卡| 亚洲成年网站在线观看| 日韩在线观看网址| 亚洲国产精品999| 国产成人在线播放| 久久国产精品久久久久| 成人乱人伦精品视频在线观看| 日韩在线资源网| 成人97在线观看视频| 亚洲欧洲日产国产网站| 欧洲成人在线观看| 一本久久综合亚洲鲁鲁| 一区二区三区视频在线| 粉嫩老牛aⅴ一区二区三区| 国产精品久久久av久久久| 国产欧美日韩高清| 国产精品扒开腿做爽爽爽视频| 欧美福利在线观看| 欧美电影免费观看电视剧大全| 久久精品99久久久久久久久| 69久久夜色精品国产69| 欧美在线一区二区视频| 欧美中文在线字幕| 欧美黑人一级爽快片淫片高清| 色偷偷91综合久久噜噜| 久久伊人精品天天| 久久成年人视频| 亚洲欧美日韩成人| 欧美黑人巨大精品一区二区| 78色国产精品| 亚洲自拍中文字幕| 久久久久久av| 国产mv免费观看入口亚洲| 日韩av在线播放资源| 亚洲欧美激情在线视频| 欧美极品少妇与黑人| 日韩网站免费观看高清| 高跟丝袜一区二区三区| 久久久精品在线观看| 成人久久精品视频| 不卡毛片在线看| 精品久久久久久久久中文字幕| 国产手机视频精品| 久久久久北条麻妃免费看| 成人性教育视频在线观看| 日韩av在线网| 国产精品久久婷婷六月丁香| 中文字幕视频在线免费欧美日韩综合在线看| 国产精品视频在线观看| 丁香五六月婷婷久久激情| 麻豆精品精华液| 久久人91精品久久久久久不卡| 国产精品一区二区久久久| 久久成人18免费网站| 精品小视频在线| 午夜精品久久17c| 久久影视电视剧免费网站| 国产91精品青草社区| 中文在线不卡视频| 亚洲xxxx18| 亚洲三级黄色在线观看| 国产精品福利在线观看网址| 日韩av在线导航| 九九九热精品免费视频观看网站| 国产精品久久久久久久久久三级| 亚洲国产成人精品女人久久久| 久久香蕉国产线看观看av| 国产一区二区三区视频在线观看| 911国产网站尤物在线观看| 98精品国产自产在线观看| 麻豆成人在线看| 久久99精品久久久久久噜噜| 欧美激情欧美激情| 蜜月aⅴ免费一区二区三区| 中文字幕精品在线| 欧美午夜精品伦理| 黑人巨大精品欧美一区二区免费| 亚洲一区二区久久久久久久| 亚洲成人av在线播放| 国产精品一区久久| 欧美一区二区视频97| 欧美综合一区第一页| 国产成人精品久久亚洲高清不卡| 国产一区二区三区欧美| 欧美怡红院视频一区二区三区| 欧美亚洲视频在线观看| www亚洲欧美| 国产精品久久二区| 国产成人精品免高潮在线观看| 日韩专区中文字幕| 久久精品国产一区二区三区| 高清日韩电视剧大全免费播放在线观看| 欧美日韩国产中文精品字幕自在自线| 国产精品丝袜久久久久久不卡| 在线亚洲欧美视频| 国产精品视频免费观看www| 北条麻妃久久精品| 欧美激情视频在线| 97人人做人人爱| 日日骚久久av| 日韩电影第一页| 日韩视频免费大全中文字幕| 91精品免费久久久久久久久| 亚洲免费视频网站| 国产精品视频免费在线观看| 国产成人免费av电影| 国产精品成人在线| 亚洲日本欧美中文幕| 亚洲性69xxxbbb| 青青草精品毛片| 91视频-88av| 国产精品久久久久久久久久99| 精品二区三区线观看| 亚洲视频国产视频| 亚洲免费电影在线观看| 在线精品高清中文字幕| 精品丝袜一区二区三区| 亚洲色图欧美制服丝袜另类第一页| 91夜夜未满十八勿入爽爽影院| 国内精品久久久久影院优| 国产成人拍精品视频午夜网站| 日韩欧美在线一区| 亚洲自拍小视频| 尤物九九久久国产精品的特点| 97国产suv精品一区二区62| 欧美午夜宅男影院在线观看| 日韩精品欧美国产精品忘忧草| 成人国产亚洲精品a区天堂华泰| 91精品国产成人| 8x拔播拔播x8国产精品| 国产一区二区三区视频免费| 国产精品男女猛烈高潮激情| 热99精品只有里视频精品| 国产精品久久久久久亚洲调教| 亚洲欧美日韩一区二区在线| 欧美午夜精品久久久久久浪潮| 欧美午夜精品伦理| 欧洲日本亚洲国产区| 国产欧美一区二区| 国产精品成人va在线观看| 69国产精品成人在线播放| 日韩中文字幕网| 欧美疯狂xxxx大交乱88av| 欧美精品xxx| 亚洲成人动漫在线播放| 欧美视频中文字幕在线| 亚洲欧洲在线观看| 国产精品成久久久久三级| 久久精品视频免费播放| 91在线观看欧美日韩|