第三十五节 Linux系统编程- Linux系统编程管理文件和目录-拷贝文件(十一)

-------------------------------------资源来源于网络,仅供自学使用,如有侵权,联系我必删.

第一:

拷贝和移动文件

可以通过 cp 命令和 mv 命令实现。mv 可以理解为“重命名”;cp 拷贝要注意和创建硬链接区分开来,硬链接的 inode 是相同,它们是同一个文件,但是 cp 拷贝之后,inode 索引节点是不同的,它们是不同的文件。

 

拷贝简介

Linux 下并没有专门的拷贝函数和接口,需要通过 open,read,wite 等文件操作函数实现。

 

拷贝流程图

 

第二:

拷贝例程

编写简单的 cpfile.c 文件完成拷贝功能

#include <stdio.h>

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

//argv[1] is oldpath ; argv[2] is newpath
#define LENTH 1024
int main(int argc,char *argv[])
{
	int fds,fdt;
	char buffer[LENTH];
	char *fileold,*filenew;
	
	fileold = argv[1];
	filenew = argv[2];
	
    //将 main 参数传递给 main 内部变量,然后检测参数是否输入
	if(argc <3){
		printf("\nPlease input file path\n");
		return 1;
	}

	//打开oldpath
    //打开新旧文件路径。如果文件 fdt 不存在则新建		
	fds = open(fileold,O_RDWR);
	if(fds<0)
	{
		printf("Please make sure file path\n");
		return 1;
	}
	
	//打开newpath,如果没有则创建目标文件
	fdt = open(filenew,O_WRONLY|O_CREAT);
	if(fdt<0)
	{
		printf("Please make sure file path\n");
		return 1;
	}

	//读和写操作
    //从 fds 文件中读取内容,然后写入 fdt 文件中
	while(read(fds,buffer,LENTH)){
		write(fdt,buffer,strlen(buffer));
	}
	
	//关闭文件
	close(fds);
	close(fdt);

    //打印结束信息	
	printf("cp to finished!\n");
	printf("cp %s to %s success!\n",fileold,filenew);
	return 0;
}

 

第三:

编译运行测试

1)在 Ubuntu 系统下,如下图所示,进入前面实验创建的目录
“/home/linuxsystemcode/CatlogFile”,将源码 cpfile.c 拷贝进去,进入文件夹 CatlogFile,如下图所示。

2)使用命令“arm-none-linux-gnueabi-gcc -o cpfile cpfile.c -static”编译 cpfile 文件,如下图所示,使用命令“ls”可以看到生成了 cpfile 可执行文件。

3)将文件拷贝到挂载点

4)开发板挂载后运行文件

5)接着查看一下 cptest 文件,和原来的 linktest.c 不是同一个文件

6)打开复制生成的 cptest 文件,内容没变,如下图所示。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值