文件编程的一般步骤
- 打开/创建文件
- 读取文件/写入文件
- 关闭文件
creat()函数—创建文件
1.包含头文件
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
2.函数原型
int creat(const char *pathname, mode_t mode);
3.参数说明
pathname:文件路径(绝对路径/相对路径)
mode:创建模式,系统默认四个宏
可执行(1):S_IXUSR
可写(2):S_IWUSRL
可读(4):S_IRUSR
可读、可写、可执行(7):S_IRWXU
4.返回值
返回值为文件描述符
成功:返回一个非负整数
失败:返回-1
int fd;
fd = creat("./file", S_IRWXU);
open()函数—打开文件
1.包含头文件
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
2.函数原型
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
3.参数说明
pahname:文件路径
flags:
O_RDONLY:只读打开
O_WRONLY:只写打开
O_RDWR:可读可写打开
以上参数只能三选一,可与下列参数使用 “|” 连接后使用
1、O_CREAT若文件不存在则创建它,使用此选项时,需要同时说明第三个参数mode,用其说明该 新文件的存取许可权限。
2、O_EXCL如果同时指定了O_CREAT,而文件已经存在,则出错(返回-1)。
3、O_APPEND每次写时都加到文件的尾端。
4、O_TRUNC属性去打开文件时,如果这个文件中本来是有内容的,而且为只读或只写成功打开, 则将其长度截短为0。
mode:创建模式(可读可写可执行)
可执行:0100
可写:0200
可读:0400
可读、写:0600
可读、可写、可执行:0700
一定是在flags中使用了O_CREAT标志,mode记录待创建的文件的访问权限
4.返回值
返回值为文件描述符
成功:返回一个非负整数
失败:返回-1
5.文件描述符
类似一个索引,用于区分使用open打开的各个文件,在文件打开后进行后续操作都必须通过文件描述符来判断是哪一个文件。当一个文件被打开后,系统会产生一个结构体来存储这个文件的一些信息,而文件描述符会指向这些结构体,后续的write、read、close、lseek等文件操作都要基于文件描述符
write()函数—文件写入
1.包含的头文件
#include <unistd.h>
2.函数原型
ssize_t write(int fd, const void *buf, size_t count);
3.参数说明
int fd:fd为写入文件的文件描述符
const void *buf:buf存放写入文件的内容
size_f count:写入文件内容的大小(字节数)
4.返回值
成功:返回写入字节的个数(一个整型数)
失败:返回-1
5.示例
int main()
{
int fd;
char* buf = "hello world";
fd = open("./file1",O_RDWR);
if(fd = -1){//判断文件是否可以打开
printf("open file1 failed\n");
//打开文件失败,新建一个名叫file1的文件,权限为6(代表可读、可写)
fd = open("./file1",O_RDWR|O_CREAT,0600);
if(fd > 0){
printf("creat file1 success!\n");
}
}
printf("open file1 success");
write(fd,buf,strlen(buf));
printf("fd = %d\n",fd);
close(fd);
return 0;
}
read()函数—文件读取
1.包含头文件
#include <unistd.h>
2.函数原型
ssize_t read(int fd, void *buf, size_t count);
3.参数说明
int fd:fd为读取文件的文件描述符
const void *buf:buf为读出内容存放的缓冲区
size_f count:读出内容的大小
4.返回值
成功:返回读取字节的个数(一个整型数)
失败:返回-1;
5.示例
int main()
{
int fd;
fd = open("./file1",O_RDWR);//打开文件
char *readBuf=(char*)malloc(sizeof(char)*writeNum);
int readNum=read(fd,readBuf,writeNum);
close(fd);
printf("read %d,contex %s\n",readNum,readBuf);
return 0;
}