摘要: read属于系统调用,它的缓存是基于内核的缓冲,是记在内核空间的. 而fgetc是标准函数, 是在用户空间I/O缓冲区的比如用fgetc读一个字节,fgetc有可能从内核中预读1024个字节到I/O缓冲区中,再返回第一个字节,这时该文件在内核中记录的读写位置是1024,而在FILE结构体中记录的读写... 阅读全文
posted @ 2014-07-08 21:24 弹着钢琴设计 阅读(253) 评论(0) 推荐(0) 编辑
摘要: 用户程序调用C标准I/O库函数读写文件或设备,而这些库函数要通过系统调用把读写请求传给内核,最终由内核驱动磁盘或设备完成I/O操作。C标准库为每个打开的文件分配一个I/O缓冲区以加速读写操作,通过文件的FILE结构体可以找到这个缓冲区,用户调用读写函数大多数时候都在I/O缓冲区中读写,只有少数时候需... 阅读全文
posted @ 2014-07-08 21:23 弹着钢琴设计 阅读(1584) 评论(0) 推荐(0) 编辑
摘要: PS:这里的缓冲与非缓冲的区别是相对于用户进程,下文的“非缓冲文件系统”指用户的程序没有缓冲区,不要误解为系统没有缓冲区。1.缓冲文件系统缓 冲文件系统的特点是:在内存开辟一个“缓冲区”,为程序中的每一个文件使用,当执行读文件的操作时,从磁盘文件将数据先读入内存“缓冲区”, 装满后再从内存“缓冲区”... 阅读全文
posted @ 2014-07-08 14:53 弹着钢琴设计 阅读(315) 评论(0) 推荐(0) 编辑
摘要: 网上关于文本文件与二进制文件的文章很多,但遗憾的是,这些文章讲得都比较散。下面我将结合所查到的资料,从多个角度谈谈文本文件与二进制文件。一、文本文件与二进制文件的定义 大家都知道计算机的存储在物理上是二进制的,所以文本文件与二进制文件的区别并不是物理上的,而是逻辑上的。这两者只是在编码层次上有差异。... 阅读全文
posted @ 2014-07-08 14:53 弹着钢琴设计 阅读(506) 评论(0) 推荐(0) 编辑
摘要: 之前看过一些开源程序的源码,也略微知道些Apache的CGI处理程序架构,于是用了一周时间,用C写了一个简单的CGI Server,代码算上头文件,一共1200行左右,难度中等偏上,小伙伴可以仔细看看,对于学生来说,拿来当简历,含金量还是足够的。如果把程序里所涉及的HTTP协议,Linux下POSI... 阅读全文
posted @ 2014-07-08 14:51 弹着钢琴设计 阅读(345) 评论(0) 推荐(0) 编辑
摘要: 在Linux系统中,系统默认认为每个进程打开了3个文件,即每个进程默认可以操作3 个流,即标准输入了流(/dev/stdin),标准输出流(/dev/stdout),标准错误输出流(/dev/stderr),每个进程默认从标准 输入流中读取数据,从标准输出流些正确的信息,向标准错误输出流些错误信息。... 阅读全文
posted @ 2014-07-08 14:07 弹着钢琴设计 阅读(478) 评论(0) 推荐(0) 编辑
摘要: 近期看到了文本流和二进制流的区别,书上讲的比较含糊,理解不透彻,于是细细琢磨了下,把心得跟大家分享一下:一、首先回答,什么是文件,流 一个文件通常就是磁盘上的一段命名的存储区。比如 stdio.h 就是一个包含一些有用信息的文件的名称。 C将文件看成是连续的字节序列,其中每一个字节都可以单独地读... 阅读全文
posted @ 2014-07-08 14:06 弹着钢琴设计 阅读(363) 评论(0) 推荐(0) 编辑