文件IO及其函数使用

目录

1、open函数

2、close函数

3、read函数

4、write函数

5、案例(模拟CP)

1、open函数

所需头文件

#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);

返回值:成功则返回文件描述符,否则返回-1

函数参数:

pathname:指向想要打开的文件路径名,或者文件名。我们需要注意的是,这个路径名是绝对路径名。文件名则是在当前路径下的。

flags:用来控制打开文件的模式

打开文件的方式,以下三种方式必须其一:

O_RDONLY:以只读方式打开文件

O_WRONLY:以只写方式打开文件

O_RDWR:以可读可写的方式打开文件

其余的,和上面的进行或运算:

O_CREAT:如果文件不存在,则创建文件,但同时必须使用第三个参数

O_EXCL:如果文件存在,则出错

O_NOCTTY: 使用本参数时,如文件为终端,那么终端不可以作为调用open()系统调用的那个进程的控制终端

O_TRUNC:如果文件存在,则清空文件中的内容

O_APPEND:文件存在,则追加在文件的末尾

mode:用来设置创建文件的权限(rwx),用一个八进制数表示。当flags中带有O_CREAT时,需要去创建一个新的文件,才需要去设置权限。

2、close函数

头文件:#include <unistd.h>

int close(int fd);

参数:已打开的文件的文件描述符

返回值:成功返回0,失败返回-1

3、read函数

头文件:#include <unistd.h>

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

功能:将从fd所描述的文件中的内容读出,并放入以buf地址开始的一片空间中,count是每次要读的字节数

参数1:文件描述符

参数2:读取到数据保存到buf中

参数3:要读的字节数

返回值:成功读取每次返回读到的字节数,返回0表示已经读完,失败返回-1

4、write函数

头文件:#include <unistd.h>

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

功能:将以buf地址开始的那片空间中的内容,写入到以fd描述的文件中去,每次写入count个字节数

参数1:文件描述符

参数2:要写的数据存在的首地址

参数3:要写入的字节数(只要count设置的合适,用sizeof,可以一次写完)

返回值:成功返回写入的字节数count,失败返回-1

5、案例(模拟CP)

利用文件IO各函数进行两个文本之间的copy,模拟了虚拟机下的CP命令,此案例对学习文件IO各函数帮助很大,涵盖了各个函数,以下附上程序,读者可以参考学习

#include<stdio.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<unistd.h>
#include<string.h>

int main(int argc , char *argv[])
{
	//打开文件1,并进行打开成功与否的检测,文件1当是已经有数据存在了的,开的权限是可读
	int fr = open(argv[1],O_RDONLY);
	if(fr < 0)
	{
		perror("open error");
		return -1;
	}
	//打开文件2,检测,文件2是待赋值写入的空文本,所以开的权限是可写
	int fw = open(argv[2],O_WRONLY);
	if(fw < 0)
	{
		perror("open error");
		return -1;
	}	
	//文件操作
	char buf[1024] = {0};
	while(1)
	{
		memset(buf,0,sizeof(buf));    //保险起见,每次清空一下
		int n = read(fr,buf,sizeof(buf));
		if(0 == n)
		{
			break;
		}
		else if(n == -1)
		{
			printf("read error\n");
		}
		write(fw,buf,sizeof(buf));
	}
	//关闭文件
	close(fr);
	close(fw);
	return 0;
}

说明:双向箭头表示等价调用,黄色箭头表示数据的流向,buf可以视为一个中间器,在读取出来的时候暂时存一下,之后又写入其他地方

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

翔在天上飞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值