您的位置:首页 > 编程语言

UNIX环境高级编程-读书笔记-文件操作(二)

2017-06-27 09:27 423 查看
linux系统 下的文件的操作

1.在linux下面,我们使用文件描述符来唯一的标识一个文件

注意:在一个进程中,他是唯一的标识已经打开的文件

是一个非负的整数

分配的规则是最小的且未被占用的

2.在一个进程中默认打开的三个文件是

stdin

stdout

stderr

他们三个的文件描述符分别是 0 1 2

3.打开文件

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

parhname 要打开的文件的路径【可以是相对路径或者是绝对路径】

flags 打开的方式

O_RDONLY 只读

O_WDONLY 只写

O_RDWR 读写

除了这三种以外,还有一些配合使用的;但是注意上面的三种有且只能有一个

其他的都是和这三个配合使用,书写是使用或运算

O_CREAT 如果文件不存在,就创建此文件

O_TRUNC 如果文件存在,就把次文件清空

O_APPEND 如果文件存在,那么只在次文件的后面追加

O_EXCL 和O_CREAT一起使用,如果文件已经存在,那么打开失败,对应的errno的值会设定为EEXIST

4.文件定位

off_t lseek(int fd, off_t offset, int whence);

fd 文件描述符

offset 偏移量

whence 偏移位置

说明:偏移量的大小是字节 可以为正可以为负

为负数就是相对偏移位置往前

为正数就是相对偏移位置往后

偏移的位置:

SEEK_END 文件的结尾

SEEK_SET 文件的开始

SEEK_CUR 当前位置

举例:

lseek(fd, 1024, SEEK_SET);

就是相对文件fd 往后偏移1024个字节

lseek函数的返回值是偏移后的文件描述符

失败返回-1.

5.dup 和dup2

int dup(int oldfd);

复制一个文件描述符,返回值是新的文件描述符

新旧文件描述符共享偏移量,也就是说文件的偏移量是一样的

只有把两个描述符都关闭才能关闭文件

int dup2(int oldfd, int newfd);

这个函数也是复制文件描述符号,但是如果oldfd已经被占用的化,就先关闭他,然后在复制

6.文件映射

void *mmap(void *addr, size_t length, int prot, int flags,int fd, off_t offset);

这个函数是对文件进行一个映射

addr NULL

lenth 要映射多大【字节】

prot 你映射的这段空间的访问的权限

PROT_READ|PROT_WRITE PROT_READ

没有只写权限 没有意义

flage MAP_SHARED

fd 你映射的文件描述符

offset 偏移量,指的是你要映射的文件偏移量,一般我们设置为0 ,表示从文件的开始进行映射

返回值: 一个指针

那我们对这个返回值 指针进行的操作,就是对这个文件进行的操作,

使用mmap函数的好处就是,减少了read,write的操作,是最快的i/o操作

缺点:映射的长度是固定的。【其实可以实现自动增长】

7.文件的读写

ssize_t read(int fd, void *buf, size_t count);

fd 文件描述符

buf 缓冲区

count 每次读的大小

就是从fd代表的文件中读取count大小的文件放在buf中

返回值就是每一次实际读的字节数

ssize_t write(int fd, const void *buf, size_t count);

fd 文件描述符

buf 缓冲区

count 每次写的大小

就是把buf 中的文件写到fd代表的文件

返回值是每一次实际写的字节说

说明:

这两个函数通常是配合使用,
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息