关于如何创建自定义的命令,实现linux中的copy功能
2015-03-20 20:52
393 查看
最近一段时间,做了关于linux下的shell三个实验,收获颇多。其中一个关于创建自定义命令,来实现linux中的copy功能。自己大一的时候C++学的不是很好,现在突然做这种题目,顿感头大。不得不说,互联网的确是能解决很多困难。首先提到的一种方法是通过alias内建命令的方法,主要做法是:alias 自定义命令名=‘已有命令’。不过这种做法看似方便,不过没有剖开命令见本质,被老师否决了。好吧,开始用自己不擅长的c语言写。下面是第一个版本的:
#include <stdio.h> #include <errno.h> #include <stdlib.h> #include <string.h> int main(int argc,char *argv[]) { FILE *in,*out; char buf[100]; size_t size; in=fopen(argv[1],"rb"); out=fopen(argv[2],"wb+"); if(!in) { printf("open %s failed:%s\n",argv[1],strerror(errno)); return 1; } if(!out) { printf("open %s failed:%s\n",argv[2],strerror(errno)); return 1; } while((size=fread(buf,1,sizeof(buf),in))==sizeof(buf)) { if(fwrite(buf,1,size,out)<size){ printf("write error:%s\n",strerror(errno)); return 1; } } if(feof(in)){ printf("sucess!"); }else{ printf("error:%s\n",strerror(errno)); } fclose(in); fclose(out); return 0; }
这个版本有个缺陷,使用命令拷贝文件的时候,粘贴的地方名字需要自己给出来如:mycopy 1.txt Documents/1.txt
很多同学也基本上是基于这个原理做的,可是自己感觉这种解法和cpy命令还是区别蛮大的,于是便有了下面这个修订版:
#include <stdio.h> #include <errno.h> #include <stdlib.h> #include <string.h> int main(int argc,char *argv[]) { FILE *in,*out; char buf[100]; size_t size; char *t=malloc(strlen(argv[1])+strlen(argv[2])+2); strcpy(t,argv[2]); strcat(t,"/"); strcat(t,argv[1]); argv[2]=t; in=fopen(argv[1],"rb"); out=fopen(argv[2],"wb+"); if(!in) { printf("open %s failed:%s\n",argv[1],strerror(errno)); return 1; } if(!out) { printf("open %s failed:%s\n",argv[2],strerror(errno)); return 1; } while((size=fread(buf,1,sizeof(buf),in))==sizeof(buf)) { if(fwrite(buf,1,size,out)<size){ printf("write error:%s\n",strerror(errno)); return 1; } } if(feof(in)){ printf("sucess!"); }else{ printf("error:%s\n",strerror(errno)); } fclose(in); fclose(out); }
只是添了五行代码呈现的效果就不同了。这是该命令呈现的效果:
相关文章推荐
- 如何实现在Linux下创建服务程序
- 关于spring 2.0自定义xml 标记 (二 如何实现)
- 如何实现在Linux下创建服务程序
- linux||mac os如何自定义shell命令
- Desktop Entry,关于Linux如何创建桌面快捷方式
- 关于linux系统如何实现fork的研究(二)
- 关于linux系统如何实现fork的研究(一)
- 关于linux系统如何实现fork的研究(二)
- 关于linux系统如何实现fork的研究(二)
- 如何创建linux命令”快捷方式”或”自定义命令”
- <转>如何创建linux命令”快捷方式”或”自定义命令”
- linux mknod命令创建的设备节点如何删掉
- Linux 系统 VPS如何用命令创建MYSQL数据库
- python实现清华大学联网助手(三)——linux下带参数的自定义命令/import机制
- 关于spring 2.0自定义xml 标记 (二 如何实现)
- java 中关于自定义信号在linux下的实现
- 在Linux如何使用命令创建Maven的普通java项目
- 关于android 如何 通过linux 命令 查看数据库数据
- 【linux】mkfifo 命令创建命名管道实现进程之间通信
- 如何让linux用户自定义的命令alias永久生效?