Linux 实现cp 命令
2015-07-06 23:50
567 查看
cp
用来复制文件或目录
下面说一下main函数的参数
比如对于cp来说 命令行有3个参数
则av[1] 存储 fille1这个字符串, av[2] 存储file2这个字符串, ac 等于3。
av[0] 不同环境有所不同:
经测Dev-C++ 中是D:\xx\xx\ cp01.exe
以上两者av[0]都是当前可执行文件名,前者包含了路径。
cp 用到了open函数来打开av[1];read函数读av[1];creat函数创建或清空av[2];write函数写入av[2];
用cmp比较复制的文件并无不同。
有趣的是
它可以复制它自己。
最后把cp01.c复制到Linux和Windows的共享文件夹。作用之一方便我把Linux里的代码粘贴到博客中来。
用来复制文件或目录
下面说一下main函数的参数
int main(int ac , char **av)也可写成
int main(int ac , char * av[])第一个int型参数是命令行参数个数,第二个char ** 型参数是个字符指针数组,保存命令行各参数的名字(字符串)
比如对于cp来说 命令行有3个参数
cp file1 file2
则av[1] 存储 fille1这个字符串, av[2] 存储file2这个字符串, ac 等于3。
av[0] 不同环境有所不同:
经测Dev-C++ 中是D:\xx\xx\ cp01.exe
$ ./cp01 cp01.c copy_cp01.c而我的Linux这样的命令行后av[0] 是 ./cp01
以上两者av[0]都是当前可执行文件名,前者包含了路径。
cp 用到了open函数来打开av[1];read函数读av[1];creat函数创建或清空av[2];write函数写入av[2];
/** * cp01.c * uses read and write with tunable buffer size */ #include<stdio.h> #include<unistd.h> #include<fcntl.h> #define BUFF_SIZE 4096 #define COPY_MODE 0644 void oops(char * s1, char * s2); int main(int ac, char **av) { int in_fd, out_fd, n_chars; char buf[BUFF_SIZE]; /* check args */ if( ac != 3) // must three parameters { fprintf(stderr, "usage: %s source destination\n", *av); } /* open files */ if( (in_fd = open(av[1], O_RDONLY)) == -1) { oops("Cannot open ", av[1]); } if( (out_fd = creat(av[2], COPY_MODE)) == -1 ) { oops("Cannot creat ", av[2]); } /* copy files */ while( (n_chars = read(in_fd, buf, BUFF_SIZE)) > 0 ) { if(write(out_fd, buf, n_chars) != n_chars ) { oops("Write error from ", av[1]); } } if( n_chars == -1 ) { oops("Read error from ", av[1]); } /* close files */ if(close(in_fd) == -1 || close(out_fd) == -1) { oops("Error closing files", ""); } return 0; } /** * abnormal information */ void oops(char *s1, char *s2) { fprintf(stderr, "Error: %s ", s1); perror(s2); exit(1); }
用cmp比较复制的文件并无不同。
有趣的是
它可以复制它自己。
最后把cp01.c复制到Linux和Windows的共享文件夹。作用之一方便我把Linux里的代码粘贴到博客中来。
相关文章推荐
- Linux 实现cp 命令
- centos 6.5编译安装courier-authlib编译异常结束make失败
- linux下文件夹的创建、复制、剪切、重命名、清空和删除命令
- Linux下C语言调试(3)
- Redhat Linux RPM包安装软件及其管理
- 摘录:Linux打Patch的方法
- Ubuntu14.04及以上操作系统鼠标闪烁问题
- linux 修改home 目录
- Linux下C语言的调试(2)
- linux下C语言的调试(1)
- CentOS操作系统的log日志
- Centos防火墙设置
- linux 系统下查看raid信息,以及磁盘信息
- linux下proc里关于磁盘性能的参数
- linux程序设计——线程的属性(第十二章)
- CentOS 6.4下编译安装MySQL 5.6.14
- linux下mysql的卸载、安装全过程
- linux下find查找命令用法
- Linux chmod
- ip_forward参数对Linux内核转发的影响