文件描述符:
文件描述符是一个非常小的非负整数,是内核用来标识正在进行访问的文件。
标准输入/输出/出错
shell给每个程序打开了三个文件描述符,STDIN_FILENO,STDOUT_FILEONO,STDERR_FILENO
,默认这三个文件描述符都链向终端。
不带缓冲的IO
函数open read write lseek close
提供了不带缓冲的IO,这些函数都是用文件描述符.
ssize_t read(int fd,void *buf,size_t count)
从fd标识的文件中一次读取count字节的字符到buf,返回一次读取的字节数,小于等于count
ssize_t write(int fd,void *buf,size_t count)
从buf中一次写count字节到fd标识的文件中,返回一次写入的字节数,小于等于count
eg.所谓的不带缓冲是指用户层没有缓冲,通过系统调用直接对磁盘文件进行读写。但是对于内核来说,还是进行了缓存,内核把数据写到内核缓冲存储器中,当缓冲器溢出的时候再进行实际的IO操作.
标准IO(带缓冲的IO)
标准IO通过库函数提供了无缓冲IO的带缓冲的IO接口
在用户层建立一个流缓冲区(重要内容),库函数向流缓冲区读写数据,流缓冲区溢出时进行系统调用,即再调用无缓冲的IO
fwrite fread gets
都是标准的IO
数据流向对比
无缓冲IO操作数据流向:
数据----> 内核缓冲区---->磁盘
标准IO操作数据流向:
数据---->流缓冲区---->内核缓冲区---->磁盘
BUFSIZE
标准IO函数无需担心如何选取最佳缓冲区的大小
不带缓冲的IO使用不同BUFSIZE影响程序的效率
网友评论