Linux系统编程—文件
(师臣上官可编程)
open()
需要包含的头文件
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
参数
int open(const char *pathname, int flags);
//文件路径(指针) //权限(整型数)
这里open()函数会返回一个整型数称为文件描述符
int fd;
fd = open("./file1",O_RDWR);//在当前目录下可读可写打开file1文件
Flags:
O_RDONLY 只读打开
O_WRONLY 只写打开
O_RDWR 可读可写打开
这里的文件描述符就返回至fd;后续的操作都需要文件描述符,在Linux系统里有三个默认文件描述符即:
0:标准输入
1:标准输出
2:标准错误
所以默认返回的文件描述符是从3开始的,如果打开文件失败就会返回-1,如果目录下没有需要打开的文件可以使用:
open("./file1",O_RDWR|O_CREAT,0600);
//可以在O_RDWR后面加一个或,表示如果没有file1文件就建立一个可读可写文件file1
这里的0600表示可读可写权限,权限如下:
可读 — r —4
可写 — w —2
执行 —x —1
我们可以输入ls -l 查看文件详细信息
就可以看到文件权限,像上面代码用到的O_CREAT还有几个常数可以选择:
O_CREAT :若文件不存在则创建它,使用这个选项时,需要说明迪桑参数mode,说明新文件的权限。
O_EXCL:如果同时指定了O_CREAT,而文件已经存在,则出错
O_APPEND:每次写时都加到文件的尾端
O_TRUNC:如果这个文件中是有内容的,而且为只读或只写成功打开,则将气长度截短为0.
write()
需要包含的头文件
#include<unistd.h>
参数
ssize_t write(int fd, const void *buf, size_t count);
将缓冲区buf内存里的数据写count个字节写到文件描述符fd所指的文件里面去。
read()
需要包含的头文件
#include<unistd.h>
参数
ssize_t read(int fd, void *buf, size_t count)
从文件描述符fd所指的文件里读取count个字节到buf里,如果读取成功的话返回一个整型数,表示读了多少个字节。
lseek()
光标定位函数
需要包含的头文件
#include<sys/types.h>
#include<unistd.h>
参数
off_t lseek(int fd, off_t offset, int whence);
作用:将文件读写指针相对whence移动offset个字节
offset:是偏移值,当offset为负数时光标向右移动,为正数时向左移动
whence:有以下几个宏:
SEEK_SET——文件头
SEEK_END——文件尾
SEEK_CUR——当前位置
lseek也常用于计算文件的大小:返回文件开始到偏移位置(文件尾部)的字节大小
size = lseek(fd,0,SEEK_END);
close()
close(fd);
关闭文件描述符所指的文件,对文件操作过后一定要记得关闭文件,不然会造成文件损坏。