在unix中cp是一个常用的复制文件/文件夹的指令,我们在初学unix环境高级编程时,为了熟悉文件的I/O操作,我们可以对cp指令进行仿写:
#include<t_stdio.h> #include<t_file.h> //从指令中获取文件名字 //argv【1】代表源文件名字 //argv【2】代表目标文件名字 //创建一个复制函数,返回复制的字节数 int cp_file(int s_fd , int d_fd){ int total; int r ,w;//r为读入字节数,w为写入字节数 char buf[128]; while((r=read(s_fd ,buf,128))>0){//每次读取128个字节 char * temp = buf; while(r>0){//防止出现没有全部读入的错误 w = write(d_fd , buf , r); r=r-w; total+=w; temp+=w;//继续追加 } } return total; } int main(int argc , char * argv[]){ //以只读的方式打开源文件 int src_fd = open(argv[1],O_RDONLY); //以写的方式打开目标文件,如果不存在则创建 //如果存在,则将内容清空,并且将权限设置为0644 int flags = O_WRONLY | O_CREAT | O_TRUNC; int dst_fd = open(argv[2],flags , 0644); if(src_fd==-1|dst_fd==-1) E_MSG("open",-1); //将源文件内容复制到目标文件(如果源文件内容存在) cp_file(src_fd , dst_fd); //关闭文件描述符 close(src_fd); close(dst_fd); return 0; }
这是一个简单的cp指令仿写,对于初学者来说很友好!!
使用例子:
我们还可以直接将这个可执行文件放入系统指令集中,这样可以代替我们的cp指令