不带缓冲的I/O

    Unix系统中的大多数文件I/O只需要用到5个函数:open、read、write、lseek以及close。这些函数经常被称为不带缓冲的I/O。术语“不带缓冲”指的是每个read和write都调用内核中的一个系统调用。

文件描述符

    对于内核而言,所有打开的文件都通过文件描述符引用。文件描述符是一个非负整数,变化范围是0~OPEN_MAX(允许每个进程最多打开的文件数)。当打开一个现有文件或创建一个新文件时,内核向进程返回一个文件描述符。当读或写一个文件时,使用open或create返回的文件描述符标识该文件,将其作为参数传送给read或write。

open函数

    打开或创建一个文件。若成功则返回文件描述符,若出错则返回-1。

    #include<fcntl.h>
    int open(const char *pathname, int oflag, ... /* mode_t mode */);

    仅当创建新文件时才使用第三个参数。

create函数

    创建一个新文件。若成功则返回为只写打开的文件描述符,若出错则返回-1。

    #include<fcntl.h>
    int create(const char *pathname, mode_t mode);

    create的一个不足之处是它以只写方式打开所创建的文件。现在open函数提供了选项O_CREATE和O_TRUNC,于是也就不再需要create函数。

close函数

    关闭一个打开的文件。若成功则返回0,若出错则返回-1。

    #include<unistd.h>
    int close(int filedes);

    关闭一个文件时还会释放该进程加在该文件上的所有记录锁。

    当一个进程终止时,内核自动关闭它所有打开的文件。很多程序都利用这一功能而不显示地用close关闭打开的文件。

lseek函数

    显示地为一个打开的文件设置其偏移量。若成功则返回新的文件偏移量,若出错则返回-1。

    #include<unistd.h>
    off_t lseek(int filedes, off_t offset, int whence);

    每个打开的文件都有一个与其相关联的“当前文件偏移量”,它通常是一个非负整数,用以度量从文件开始处计算的字节数。通常,读、写操作都从当前文件偏移量处开始,并使偏移量增加所读写的字节数。按系统默认的情况,当打开一个文件时,除非指定O_APPEND选项,否则该偏移量设置为0。

posted @ 2010-12-21 16:48  MikeLin  阅读(381)  评论(0编辑  收藏  举报