linux 系统编程-学习笔记2-文件I/O-open-read

来源:互联网 发布:时时彩后一做号软件 编辑:程序博客网 时间:2024/04/30 01:18
1.open
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);

功    能 :以flags 和mode 方式打开一个文件
pathname : 文件名(绝对路径/相对路径)

flags    : 打开的方式

O_RDONLY: 只读的方式
O_WRONLY: 只写的方式
O_RDWR  : 读写的方式

以上三个常量必须指定一个且只能指定一个。以下是可选的:

O_CREAT : 创建文件
O_APPEND: 追加
O_TRUNC : 清空

O_EXCL  : 如果文件存在,则错误

mode     : 文件的权限


open有两种函数原型,两个参数和三个参数


什么时候用两个参数,什么时候用三个参数?
当flags 标志为 O_CREAT 创建一个文件的时候,需要为新创建的文件赋予权限
这个时候,就需要用到mode,也就是open的三个参数的原型。

返回值: 
成功=>返回文件描述符
失败=>返回-1

int creat(const char *pathname, mode_t mode);
功能:创建一个文件
    再最初open函数没有O_CREAT功能,不能创建文件,所以必须由creat 创建文件之后
    再用open打开

    creat ===>open 

可以用手以下的方式调用open

open(pathname,O_RDWR | O_CREAT | O_TRUNC,mode);

===============================================================================

文件I/O

FILE *fp = fopen()

{

int  fd;

}

fd是由open返回的文件描述符,其大小由系统自动分配一个未用的最小的文件描述符。文件描述符的大小的范围是0-1023,其中0,1,2分别为标准输入,标准输出和标准错误输出,由系统自动分配。每一个文件描述符对应一个文件表项,文件表项由标志位,inode节点指针以及文件偏移量组成,每个inode节点又指向磁盘的一个扇区。


2.读文件read
ssize_t read(int fd, void *buf, size_t count);
功能:从文件描述符fd 指向的文件中一次读取count个字节的数据到buf为起始地址的缓冲区

fd : 文件描述符(open返回,系统打开....)
buf: 存放数据的缓冲区起始地址
count: 一次最多能读取到的字节数

返回值:
   大于0: 返回实际读取到的字节数
   等于0: 读取文件结束
   小于0:  错误

=============================================================
写文件:
ssize_t write(int fd, const void *buf, size_t count);
功能:把buf缓冲区中的数据一次写入count个字节到fd指向的文件中


fd : 文件描述符
buf: 缓冲区的首地址(数据源)
count: 一次实际写入的字节数

返回值:
  成功: 返回写入的实际的字节数
    失败:返回-1

==============================================================

关闭文件:
int close(int fd);(可以不用,当一个进程终止时,内核自动关闭它所有打开的文件)

====================================================================
操作文件指针:
off_t lseek(int fd, off_t offset, int whence);
功能:把fd指向的文件的文件指针移动到距whence位置偏移offset的位置
返回值:若成功则返回新的文件偏移量,若出错则返回-1.

whence:

SEEK_SET : 文件头
The offset is set to offset bytes.

SEEK_CUR : 当前位置
The offset is set to its current location plus offset bytes.

SEEK_END : 文件尾
The offset is set to the size of the file
plus offset bytes.

======================================================================
ssize_t pread(int fd, void *buf, size_t count, off_t offset);
功能:从fd 指向的文件中从偏移offset个字节位置处一次最多读取count个字节到buf中
fd  : 文件描述符
buf : 缓冲区(存放数据)
count : 一次最多读取的字节数 
offset: 文件指针偏移的位置
返回值:
成功:返回读取到的字节数
失败:-1

ssize_t pwrite(int fd, const void *buf, size_t count, off_t offset);
功能:把buf中的数据一次写count个字节到fd 指向的文件中偏移offset个字节的位置处
fd  : 文件描述符
buf : 缓冲区(数据源)
count : 写入的字节数 
offset: 文件指针偏移的位置
返回值:
成功:返回写入的字节数

失败:-1


======================================================================



0 0