io读取一个字节c语言,C语言用系统IO实现文件的读写与拷贝

使用到的函数说明

打开文件

int open(const char *pathname, int flags,mode_t mode);

需要的头文件:

#include

#include

#include

返回值类型是int 型的文件描述符

成功:>=0的整数

失败:-1

参数

第一个参数:为文件地址,要打开的文件路径

第二个参数:为文件类型:

O_RDONLY(以只读形式打开文件)

O_WRONLY(只写形式打开文件)

O_RDWR(读写形式打开文件)

额外参数(较常用):可选可不选

O_APPEND:以追加的方式写入内容 --> write()

O_CREAT: 如果文件不存在,则会创建。如果flags中有O_CREAT,那么就要写mode这个参数。如果flags没有O_CREAT,那么mode参数可以忽略!

O_TRUNC:如果访问的文件已经存在,则会清空

O_NOCTTY:使得终端脱离控制 --> 串口编程

获取文件大小

off_t lseek(int fildes, off_t offset, int whence);

需要的头文件

#include

#include

返回值

成功:返回目前的读写位置(即可以获得文件的大小)

失败:-1

参数说明

第一个参数(fildes):文件描述符,即用open函数获取到的

第二个参数(off_t offset):相对于第三个参数偏移了多少个字节

第三个参数(whence):文件指针位置

SEEK_SET 参数offset 即为新的读写位置.(设置指针位置)

SEEK_CUR 以目前的读写位置往后增加offset 个位移量.(指针在当前位置)

SEEK_END 将读写位置指向文件尾后再增加offset 个位移量. (指针在文件末尾)

当whence值为SEEK_CUR 或SEEK_END 时, 参数offet 允许负值的出现.

读取文件

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

需要的头文件:

#include

返回值:

成功:从文件中读取的字节数

失败:-1

参数:

第一个参数(fd):被读取的文件的文件描述符(即用open函数打开文件时获取到的文件描述符)

第二个参数(buf):读取到的数据存放在这个变量中

第三个参数(count):读取的数据字节数

文件的写入

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

需要的头文件:

#include

返回值:

成功:已经写入文件的字节数

失败:-1

参数说明:

第一个参数(fd):文件描述符(即用open函数打开文件时获取到的文件描述符)

第二个参数:要写入的数据

第三个参数:写入数据的字节数

关闭文件

int close(int fd);

需要的头文件:

#include

参数:int型的文件描述符

返回值:

成功:0

失败: -1

用系统IO实现文件的读取

//用系统IO实现文件的读取

#include

#include

#include

#include

#include

int main(int argc, char** argv[])

{

//第一步打开文件

int fd = open("./1.txt",O_RDONLY); //以只读的形式打开当前目录下的1.txt文件

//第二步:获取文件大小

int len = lseek(fd,0,SEEK_END); //先将指针偏移到文件末尾,获取文件末尾指针位置,即可获得文件大小

//第三步:将文件指针偏移到文件开头

lseek(fd,0,SEEK_SET);

//第四步:创建一个缓冲区来存放读取到的数据

char buf[len]; //创建一个大小与要读取的文件大小相等的字符数组来存放读取到的数据

//第五步:读取数据,将读取到的数据存放在数组中

read(fd,buf,len);

//第六步:打印读取到的数据

for(int i = 0; i < len; i++)

{

printf("%c",buf[i]);

}

//第七步:关闭文件

close(fd);

}

用系统IO将数据写入文件

//用系统IO将数据写入文件

#include

#include

#include

#include

#include

int main(int argc, char** argv[])

{

//第一步:打开文件

int fd = open("./1.txt",O_WRONLY | O_CREAT | O_TRUNC, 0777); //以只写的形式打开文件,文件存在则清空,不存在则创建

//第二步:将要写入的数据存放在字符串中

char* buf = "helloworld";

//第三步:获取字符串大小

int len = strlen(buf);

//第四步:写入数据到文件中

write(fd,buf,len);

//第五步:关闭文件

close(fd);

}

用系统IO拷贝文件

//用系统IO拷贝文件

#include

#include

#include

#include

int main(int argc, char** argv[])

{

//第一步:打开文件

int fd1 = open("./1.txt",O_RDONLY); //以只读的形式打开当前目录下的1.txt文件

int fd2 = open("./2.txt",O_WRONLY | O_CREAT | O_TRUNC, 0777); //以只写的形式打开文件,文件存在则清空,不存在则创建

//第二步:获取文件大小

int len = lseek(fd1,0,SEEK_END); //先将指针偏移到文件末尾,获取文件末尾指针位置,即可获得文件大小

//第三步:将文件指针偏移到文件开头

lseek(fd1,0,SEEK_SET);

//第四步:创建一个缓冲区来存放读取到的数据

char buf[len]; //创建一个大小与要读取的文件大小相等的字符数组来存放读取到的数据

//第五步:读取数据,将读取到的数据存放在数组中

read(fd1,buf,len);

//第六步:将缓冲区中的数据写入2.txt文件

write(fd2,buf,len);

//第七步:关闭文件

close(fd1);

close(fd2);

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值