Linux文件编程
Linux文件编程主要分为以下几个步骤:
- 打开/创建文件
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h> //需要包含的头文件
int open (const char *pathname,int flags);
int open (const char *pathname,int flags,mode_t mode);
int creat (const char *pathname,mode_t mode); //函数原型
/*
函数返回值是一个文件描述符(一个进程里可能会打开多个文件,文件描述符使用来区分后面的读写,究竟是给读取某个文件或者给某个写),没有文件或路径错误失败返回-1
pathname:是一个字符串指针,指向将要打开或创建文件的路径及文件名
flags:打开或创建文件的权限
参数主要有:O_RDONLY:只读打开 O_WRONLY:只写打开 O_RDWR:以可读可写打开
当我们附带了权限后,打开的文件就只能按照这种权限来操作。
以上这三种常数中应当只指定一个。下列常数是可选择的:(O_RDWR|O_CREAT)
O_CREAT:若文件不存在则创建他。使用时需要说明第三个参数mode,用其说明该新文件的存取许可权限
O_EXCL:如果同时指定了OCREAT,而文件已经存在,则出错
O_APPEND:每次写时都加到文件的末端
O_TRUNC:属性去打开文件时,如果这个文件中本来是有内容的,而且为只读或只写成功打开,则将其长度截为0
mode:open函数mode一般给0600, 0600:给文件所有者,可读可写
creat函数 S_IXUSR 1 可执行、S_IWUSR 2 可写、S_IRUSR 4 可读、S_IRWXU 7 可读,可写,可执行
*/
- 读取文件内容
#include <unistd.h> //需要包含的头文件
ssize_t read(int fd,const void* buf,size_t count); //函数原型
/*
成功返回读取的个数,失败返回-1
fd:文件描述符
buf:缓冲区用来存放将要读取到的数据
count:将要要读取多少数据
*/
- 写内容到文件
#include <unistd.h> //需要包含的头文件
ssize_t write(int fd,const void* buf,size_t count); //函数原型
/*
成功返回读取的个数,失败返回-1
fd:文件描述符
buf:缓冲区用来存放将要写入的数据
count:将要写入多少数据
*/
- 关闭文件
#include <unistd.h> //需要包含的头文件
int close(int fd); //函数原型
/*
成功返回0,失败返回-1
fd:文件描述符
*/
编程实现文件的拷贝
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
char *buf = NULL;
buf = (char *)malloc(1024);
int fd1 = open("./test1",O_RDONLY);//打开test1文件
if(fd1 == -1){
printf("test1:No such file or directory\n");
exit(-1);
}
int ret = read(fd1,buf,1024);//读取test1文件里的数据
if(ret == -1){
perror("read");
}
printf("read: %d byte %s\n",ret,buf);
int fd2 = open("./test2",O_RDWR|O_CREAT,0600);//打开或创建test2文件
if(fd2 == -1){
printf("test2:No such file or directory\n");
exit(-1);
}
ret = write(fd2,buf,strlen(buf));//将读取的数据写入test2文件里
if(ret == -1){
perror("write");
}
printf("write: %d byte %s\n",ret,buf);
free(buf);
close(fd1);//关闭test1文件
close(fd2);//关闭test2文件
return 0;
}
运行结果