文件IO_open(),read(),write(),lseek(),close()

open()、read()、write()、lseek()和close()。这5个函数的特点是不带缓存,直接对文件(包括设备)进行读写操作。这些函数虽然不是ANSI C 的组成部分,但是是POSIX的组成部分。

基本文件操作

1. 函数说明

  open() 函数用于打开或创建文件,在打开或创建文件是可以指定文件的属性及用户的权限等各种参数。

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

  read() 函数用于将从指定的文件描述符中读取的数据放到缓存区中,并返回实际读入的字节数。若返回0,则表示没有数据可读,即已达到文件尾。读操作从当前指针位置开始。当从终端设备文件中读出数据时,通常一次最多读一行。

  write() 函数用于向打开的文件写数据,写操作从文件的当前指针位置开始。对磁盘文件进行写操作,若磁盘文件已满或超出该文件的长度,则write()函数返回失败。

  lseek() 函数用于在指定的文件描述符中将指针定位到响应的位置。它只能用在可定位(可随机访问)的文件中。管道、套接字和大部分的字符设备文件是不可定位的,所以在这些文件的操作中无法使用lseek()调用。

2. 函数格式

open()函数

int open(const char *pathname, int flags, mode_t mode);

所需头文件

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
open()所需头文件

参数:

  pathname:被打开的文件名(可包含路径名)。

  flags:文件打开的方式。

O_RDONLY:以只读方式打开文件。

O_WRONLY: 以只写方式打开文件。

O_RDWR:以读写方式打开文件。

O_CREAT:如果该文件不存在,就创建一个新的文件,并用第三个参数为其设置权限。

O_EXECL:如果使用O_CREAT时文件存在,则可返回错误消息。这一参数可测试文件是否存在。此时open是原子操作,防止多个进程同时创建同一个文件。

O_NOCTTY:使用本参数是,如果文件为终端,那么该终端不会成为调用open()的那个进程的控制终端。

O_TRUNC:若文件已经存在,那么会删除文件中的全部原有数据,并且设置文件大小为0。

O_APPEND:以添加方式打开文件,在打开文件的同时,文件指针指向文件尾,即将写入的数据添加到文件尾。
flag参数

  mode:被打开文件的存取权限。

被打开文件的存取权限

可以用一组宏定义:S_I(R/W/X)(USR/GRP/OTH)
其中 R/W/X 分别表示 读/写/执行 权限
USR/GRP/OTH 分别表示 文件所有者/文件所属组/其他用户

例如,S_IRUSR|S_IWUSR 表示设置文件所有者的可读可写属性。八进制表示法中600也表示同样的权限。
被打开文件的存取权限

返回值:

  成功:返回文件描述符。

  失败:-1。

原文地址:https://www.cnblogs.com/doitjust/p/11062685.html