具体实现思路:
1.打开源文件,判断argc<3,argv[0]为可执行程序的名字,argv[1]为源文件,argv[2]为目标文件。
2.打开需要读取的文件,统计文件大小,将需要读取的文件读入到临时的字符串数组空间。
3.并且创建一个新文件,将读到的数据写入到新创建的文件即可。
4.关闭文件。
需要的函数:
open();
lseek();
read();
write();
close();
具体代码如下:
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
int main(int argc , char **argv)
{
int fdScr;
int fdDec;
char *readbuf = NULL;
if(argc < 3) //判断传入的参数是否正确
{
printf("pararm error\n");
exit(-1);
}
fdScr = open(argv[1] , O_RDWR); //以只读的方式打开命令行传过来的第一个文件
int filesize = lseek(fdScr , 0 , SEEK_END); //统计文件大小
printf("file size is : %d \n" , filesize); //打印文件大小
lseek(fdScr , 0 , SEEK_SET); //光标移到文件头
//在堆区开辟一个大小为所读文件大小的内存空>间,用以保存所读到的文件,防止野指针
readbuf = (char *)malloc(sizeof(char) * filesize + 8);
int n_read = read(fdScr , readbuf ,filesize);
fdDec = open(argv[2] , O_RDWR|O_CREAT|O_TRUNC , 0600);
int n_write = write(fdDec , readbuf , strlen(readbuf));
close(fdScr);
close(fdDec);
return 0;
}
最后执行
gcc mycp.c -o mycp
;./mycp mycp.c mycpback.c
在终端可以看到所完成拷贝的所有内容。