摘要: 传统的UNIX实现在内核中设有缓冲区高速缓存或页面高速缓存,大多数磁盘I/O都通过缓冲进行。当将数据写入文件时,内核通常先将数据复制到其中一个缓冲区中,如果 该缓冲区尚未写满,则并不将其排入输出队列,而是等待其写满或者当内核需要重用该缓冲区以便存放其他磁盘块数据时,再将该缓冲排入输出队列,然后等待其到达队首时,才进行实际的I/O操作。这种输出方式被称为延迟写(delayed write)。延迟写减少了磁盘读写次数,但是却降低了文件内容的更新速度,使得欲写到文件中的数据在一段时间内并没有写到磁盘上。当系统发生故障时,这种延迟写可能造成文件更新内容的丢失。为了保证磁盘实际文件系统与缓冲区高速缓存中 阅读全文
posted @ 2013-12-31 09:18 ITtecman 阅读(1496) 评论(0) 推荐(1) 编辑
摘要: 下面两个函数都可用来复制一个现有的文件描述符:#include int dup( int filedes );int dup2( int filedes, int filedes2 );两函数的返回值:若成功则返回新的文件描述符,若出错则返回-1由dup返回的新文件描述符一定是当前可用文件描述符中的最小数值。用dup2则可以用filedes2参数指定新描述符的数值。如果filedes2已经打开,则先将其关闭。如若filedes等于filedes2,则dup2返回filedes2,而不关闭它。这些函数返回的新文件描述符与参数filedes共享同一个文件表项。图3-3显示了这种情况。在此图中,我们 阅读全文
posted @ 2013-12-31 08:59 ITtecman 阅读(798) 评论(0) 推荐(0) 编辑
摘要: 一、添写至一个文件考虑一个进程,它要将数据添加到一个文件尾端。早期的UNIX系统并不支持open的O_APPEND选项,所以程序被编写成下列形式:if( lseek( fd, 0L, 2 ) ssize_t pread( int filedes, void *buf, size_t nbytes, off_t offset );返回值:读到的字节数,若已到文件结尾则返回0,若出错则返回-1ssize_t pwrite( int filedes, const void *buf, size_t nbytes, off_t offset );返回值:若成功则返回已写的字节数,若出错则返回-1调用p 阅读全文
posted @ 2013-12-31 08:24 ITtecman 阅读(680) 评论(0) 推荐(0) 编辑