Linux 文件IO函数(open/close/read/write/lseek)


文件描述符,非负整数。当为负数时(通常是-1),代表打开/创建文件出错。
其中文件描述默认值如下:
/* Standard file descriptors.  */
#define STDIN_FILENO0/* Standard input.  */
#define STDOUT_FILENO1/* Standard output.  */
#define STDERR_FILENO2/* Standard error output.  */

文件IO函数,通常包括 open,read,write,lseek,close这五个函数。
还有creat函数,但是现在用open已经可以完全替代creat。
creat = open  + oflag(O_WRONLY|O_CREAT|O_TRUNC)

int open(const char *pathname , int oflag, mode_t mode);//其中mode_t 是unsigned int类型
打开pathname文件
其中oflag的组成:第一组必选其一,第二组任选[0-n]个。
第一组:文件的打开方式
O_RDONLY    //只读
O_WRONLY   //只写
O_RDWR       //读写
第二组:其他选项
O_APPEND   //将当前偏移量指向文件末尾,否则初始值为0
O_CREAT
O_EXCL
O_TRUNC
O_NOCTTY
O_NONBLOCK
O_DSYNC
O_RSYNC
O_SYNC

int close(int filedes);

关闭指定文件


off_t lseek(int filedes, off_t offset, int whence);
修改文件当前指针偏移量,成功返回执行完成后新的文件偏移量,失败返回-1;
whence取值如下:
SEEK_SET:从文件开始处(偏移量为0处);
SEEK_CUR:从当前偏移量处;
SEEK_END:从文件结尾处;
因此类似ftell函数的功能(获取当前偏移量)可以用lseek(fd, 0, SEEK_CUR);实现。

ssize_t read (int fd, void *buf, size_t nbytes);
读取描述符fd所指向文件,读取到的内容存放到buf中,读取nbytes字节。


ssize_t write (int fd, const void *buf, size_t nbytes);
向描述符fd所指向文件写入从buf中读取的数据,共写入nbytes字节。


返回值汇总:
open,成功返回非负数文件描述符,失败返回-1;
close,成功返回0,失败返回-1;
lseek,成功返回执行完成后新的文件偏移量,失败返回-1;
read,成功返回读取到的字节数,失败返回-1;
write,成功返回成功写入字节数,失败返回-1;

其他:
关闭一个文件时,还会释放该进程加在该文件上的所有记录锁。
当一个进程终止时,内核自动关闭它所有打开的文件。

相关内容