当前位置: 首页 > news >正文

linux c语言拷贝u盘,用C语言编写linux cp 拷贝命令

(注:若转载本文请注明出处!)

对于初学者,学习文件操作参考作用,希望我的一些时间能给到大家一点帮助。

代码粗糙,但还是涉及到了很到指针移动操作,初学者可以参考,看代码,不多解释。

linux环境

假如有/home/hello.tar.gz

#gcc filecp.c -o filecp

#./filecp /home/hello.tar.gz

#cd /home/

#./filecp hello.tar.gz            //上面两条命令 ,一样将会有一个文件拷贝文件产生在/home/hello_copy.tar.gz

#./filecp hello.tar.gz hello.gz  //当前目录拷贝 和cp hello.tar.gz hello.gz 一样

#./filecp /home/hello.tar.gz  .

#./filecp /home/hello.tar.gz ./   //两条命令一样,将会把hello.tar.gz 拷贝到当前目录

#./filecp /home/hello.tar.gz ./world

#./filecp /home/hello.tar.gz .world   //两条命令一样,将会把hello.tar.gz拷贝到当前目录,但是名字变为world.tar.gz

#./filecp /home/hello.tar.gz ./world.gz

#./filecp /home/hello.tar.gz .world.gz  //两条命令一样,将会把hello.tar.gz拷贝到当前目录,但是名字变为world.gz

注:不支持目录拷贝!

/*

*filecp.c

*/

#include

#include

#include

#include

#include

#include

void main(int argc, char **argv)

{

int fd_s, fd_d;

char buf[512];

char dstname[100];

int cnt = 0;

int i = 0, j = 0;

char *ptr = NULL;

int stepNum = 0;

//1. open source file.

fd_s = open(argv[1],O_RDONLY);

//2. open destination file.

if (argc <=1) {

printf("usage: ./filecp srcfilename  dstfilename\n");

}

else if (argc <=2) {

while(argv[1][i] != '\0') {

dstname[i] = argv[1][i];

i++;

}

dstname[i] = '\0';

printf("dstname: %s\n",dstname);

ptr = strchr(dstname, '.');

if(ptr) {

printf("ptr %x - dstname %x = %d\n",ptr,dstname, ptr-dstname);

stepNum = i - (ptr - dstname) + 1;

printf("stepNUm: %d i : %d\n",stepNum,i);

int n =  0;

for (n=0; n<5; n++) {

for (j=0; j

i++;

}

printf(" last="" i:="" %d\n",i);             printf("real destname: %s \n",dstname);

ptr[0] = '_';

ptr[1] = 'c';

ptr[2] = 'o';

ptr[3] = 'p';

ptr[4] = 'y';

printf("real destname: %s \n",dstname);

}

else {

printf("dstname ptr = NULL\n");

}

fd_d = open(dstname,O_RDWR|O_CREAT,0666);

}

else if (argc <=3) {

i = 0;

while(argv[1][i] != '\0') {

dstname[i] = argv[1][i];

i++;

}

dstname[i] = '\0';

if ((('.' == argv[2][0]) && ('\0' == argv[2][1]))|| \

(('.' == argv[2][0]) && ('/' == argv[2][1]) && \

('\0' == argv[2][2])) ){

ptr = strchr(dstname, '.');

char *tmp = NULL;

tmp = ptr;

while ('/' != tmp[0]) {

tmp--;

}

i = 0;

while('\0' != (++tmp)[0]) {

dstname[i] = tmp[0];

i++;

}

dstname[i] = '\0';

fd_d = open(dstname,O_RDWR|O_CREAT,0666);

}

else {

if (!strchr(++argv[2], '.')) {

i = 0;

j = 0;

--argv[2];

while ('\0' != argv[2][i]) {

if (('.' != argv[2][i]) && ('/' != argv[2][i])) {

dstname[j] = argv[2][i];

j++;

}

i ++;

}

dstname[j] = '\0';

ptr = strchr(++argv[1], '.');

while ('\0' != ptr[0]) {

dstname[j] = (ptr++)[0];

j++;

}

dstname[j] = '\0';

}

else {

i = 0;

j = 0;

while (('\0' != argv[2][i])) {

if('/' != argv[2][i]) {

dstname[j] = argv[2][i];

j++;

}

i++;

}

dstname[j] = '\0';

}

fd_d = open(dstname,O_RDWR|O_CREAT,0666);

}

}

//3. read source file data.

while((cnt = read(fd_s, buf, 512)) > 0 ) {

/*4. write data to target file.*/

//  printf("cnt : %d\n",cnt);

write(fd_d, buf, cnt);

}

//5. close file descriptor.

close(fd_s);

close(fd_d);

}

阅读(525) | 评论(0) | 转发(0) |

相关文章:

  • linux是开发环境,Linux开发环境
  • 卸载win19安装linux,Win10 LTSC 2019 安装和卸载 linux 子系统
  • linux远程访问图形硬件,Psensor - 图形硬件温度监控器适用于Linux
  • linux如何查看内核内存使用情况,如何查看centos系统cpu/内存使用情况
  • linux设置开机显示详细信息,CentOS7.x 将开机进度条替换成显示详细信息
  • linux执行多个选项,分享|使用 Terminator 在一个窗口中运行多个终端
  • linux安卓开发培训,Android培训内部资料PPT下载
  • c语言折半查找输出坐标,C语言折半查找
  • c语言编程规范检查clang,使用Xcode开发iOS语法检查的Clang插件
  • 计算机二级c语言2013,2013年计算机二级C语言模拟试题三及答案
  • 索引存储 c语言,C语言索引操作
  • c语言基础模板,C语言基础(一)
  • 职工管理单链表系统c 语言,C语言课程设计职工信息管理系统单链表实现程序源代码.doc...
  • c语言读取bmp 文件的数据结构,BMP格式文件的数据结构
  • c语言实训的总目的意义,C语言实训总结
  • Angular js 常用指令ng-if、ng-class、ng-option、ng-value、ng-click是如何使用的?
  • CEF与代理
  • gf框架之分页模块(五) - 自定义分页
  • Git学习与使用心得(1)—— 初始化
  • java中的hashCode
  • Just for fun——迅速写完快速排序
  • Laravel 实践之路: 数据库迁移与数据填充
  • Redis字符串类型内部编码剖析
  • Spring Cloud中负载均衡器概览
  • 浮现式设计
  • 基于Javascript, Springboot的管理系统报表查询页面代码设计
  • 基于Mobx的多页面小程序的全局共享状态管理实践
  • 技术:超级实用的电脑小技巧
  • 爬虫进阶 -- 神级程序员:让你的爬虫就像人类的用户行为!
  • 前端相关框架总和
  • 前端性能优化--懒加载和预加载
  • 想使用 MongoDB ,你应该了解这8个方面!
  • 新手搭建网站的主要流程
  • 策略 : 一文教你成为人工智能(AI)领域专家
  • #Linux杂记--将Python3的源码编译为.so文件方法与Linux环境下的交叉编译方法
  • #NOIP 2014# day.1 T2 联合权值
  • #QT(TCP网络编程-服务端)
  • (DFS + 剪枝)【洛谷P1731】 [NOI1999] 生日蛋糕
  • (八)光盘的挂载与解挂、挂载CentOS镜像、rpm安装软件详细学习笔记
  • (附表设计)不是我吹!超级全面的权限系统设计方案面世了
  • (规划)24届春招和25届暑假实习路线准备规划
  • (论文阅读11/100)Fast R-CNN
  • (七)理解angular中的module和injector,即依赖注入
  • (四)linux文件内容查看
  • (原創) 是否该学PetShop将Model和BLL分开? (.NET) (N-Tier) (PetShop) (OO)
  • .NET Micro Framework初体验
  • .NET 发展历程
  • .NET/C# 异常处理:写一个空的 try 块代码,而把重要代码写到 finally 中(Constrained Execution Regions)
  • .Net高阶异常处理第二篇~~ dump进阶之MiniDumpWriter
  • .sdf和.msp文件读取
  • /etc/motd and /etc/issue
  • [⑧ADRV902x]: Digital Pre-Distortion (DPD)学习笔记
  • [ASP.NET MVC]如何定制Numeric属性/字段验证消息
  • [AutoSar]工程中的cpuload陷阱(三)测试
  • [Docker]六.Docker自动部署nodejs以及golang项目