IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 用C语言编程:拷贝大文件 -> 正文阅读

[C++知识库]用C语言编程:拷贝大文件

拷贝上课的视频,到当前路径new.mp4

#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>

#define N 1024*1024	//1Mb

//拷贝大文件,argv[1]->源文件;argv[2]->目标文件
int main(int argc,char **argv)
{
	int fd1,fd2;
	char buf[N];
	int ret;
	
	fd1=open(argv[1],O_RDWR);//打开源文件
	if(fd1==-1)
	{
		perror("open fd1 fail\n");
		return -1;
	}
	fd2=open(argv[2],O_RDWR|O_CREAT|O_TRUNC);//创建目标文件(会覆盖同名文件)
	if(fd2==-1)
	{
		prrror("open fd2 fail");
		return -1;
	}
	
	while(1)
	{
		bzero(buf,sizeof(buf));//清空buf
		ret=read(fd1,buf,N);//读取ret个字节(ret<=N)
		if(ret==0)
			break;
		write(fd2,buf,ret);//把读取的内容写进new.mp4
	}
	
	close(fd1);
	close(fd2);

	return 0;
}

?

?

文件的打开/新建?? ??? ?man 2 open
?? ?注:linux中所有的函数,只要参数需要用到多个宏定义,都是使用按位或连接起来
?? ?#include <sys/types.h>
?? ?#include <sys/stat.h>
?? ?#include <fcntl.h>
?? ?int open(const char *pathname, int flags);
?? ?返回值:
?? ??? ?成功 --》返回文件描述符
?? ??? ?失败 --》返回-1
?? ?参数:
?? ??? ?pathname --》你要打开的那个文件的路径名
?? ??? ?flags --》O_RDONLY ? 只读
?? ??? ?O_WRONLY ? 只写
?? ??? ?O_RDWR ? ? 可读写
?? ?情况一: 你想使用的权限跟文件本身的权限不一致,会打开失败
?? ?情况二:你想用O_RDONLY只读的方式打开文件,此时调用write写入文件是不成功的
?? ??? ?O_APPEND?? ?以追加的方式打开文件
?? ??? ?O_CREAT?? ??? ?新建文件
?? ??? ?O_EXCL?? ??? ?跟O_CREAT配合使用,表示如果文件存在就失败退出,不新建,不存在就新建
?? ??? ?O_TRUNC?? ??? ?跟O_CREAT配合使用,表示如果文件存在就清空覆盖掉原来的文件
?? ?int open(const char *pathname, int flags, mode_t mode);
?? ?参数:mode --》你创建一个文件的时候,顺便给这个设置一个权限。例:0777
?? ?注:设置权限需要考虑umask掩码值.例如:umask 0002 会使得其他用户不可写

文件的读取?? ??? ?man 2 read
?? ?注: ?ssize_t和size_t都是用typedef给长整型取的别名 ?
?? ?#include <unistd.h>
?? ?ssize_t read(int fd, void *buf, size_t count);
?? ?返回值(重点):成功 --》返回成功读取到的字节数
?? ?如果一个文件读取完毕,再次调用read读取,read返回0个字节
?? ?失败 --》-1
?? ?参数:
?? ??? ?fd --》你要读取的那个文件的文件描述符
?? ??? ?buf --》存放你读取到的内容
?? ??? ?count --》你打算读取多少字节的数据
?? ??? ?
文件的写入?? ??? ?man 2 write
?? ?ssize_t write(int fd, const void *buf, size_t count);
?? ?返回值:count写多少,返回值就是多少
?? ?参数:
?? ??? ?fd --》你要写入的那个文件的文件描述符
?? ??? ?buf --》存放你要写入的内容
?? ??? ?count --》你打算写入多少字节的数据?
?? ??? ?write(fd,"hello",5) //返回值是5
?? ??? ?write(fd,"hello",10) //返回值是10(写入hello+5个垃圾字符)
?? ??? ?write(fd,"hello",100) //返回值是100
?? ?注:count的值请你不要乱瞎写(会把垃圾数写进去)
?? ?
文件的关闭
?? ?int close(int fd);
?? ?返回值:成功 0 失败 ?-1
?? ?参数:fd --》你要关闭的文件描述符?

?

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-07-25 11:28:13  更:2021-07-25 11:29:54 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/3 7:41:24-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码