Linux文件编程

Linux文件编程

Linux文件编程主要分为以下几个步骤:

  1. 打开/创建文件
#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 可读,可写,可执行
*/
  1. 读取文件内容
#include <unistd.h> //需要包含的头文件
ssize_t read(int fd,const void* buf,size_t count); //函数原型
/*
成功返回读取的个数,失败返回-1
fd:文件描述符
buf:缓冲区用来存放将要读取到的数据
count:将要要读取多少数据
*/
  1. 写内容到文件
#include <unistd.h> //需要包含的头文件
ssize_t write(int fd,const void* buf,size_t count); //函数原型
/*
成功返回读取的个数,失败返回-1
fd:文件描述符
buf:缓冲区用来存放将要写入的数据
count:将要写入多少数据
*/
  1. 关闭文件
#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;
}

运行结果
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值