52 lines
958 B
C
52 lines
958 B
C
|
// 使用系统调用实现cp命令
|
||
|
// 1. 打开源文件
|
||
|
// 2. 创建目标文件
|
||
|
// 3. 循环读取源文件,写入目标文件
|
||
|
// 4. 关闭文件
|
||
|
#include <stdio.h>
|
||
|
#include <stdlib.h>
|
||
|
#include <unistd.h>
|
||
|
#include <fcntl.h>
|
||
|
|
||
|
int main(int argc, char *argv[])
|
||
|
{
|
||
|
int srcfd, dstfd;
|
||
|
char buf[1024];
|
||
|
int len;
|
||
|
|
||
|
if (argc < 3)
|
||
|
{
|
||
|
printf("./a.out srcfile dstfile\n");
|
||
|
exit(1);
|
||
|
}
|
||
|
|
||
|
// 打开源文件
|
||
|
srcfd = open(argv[1], O_RDONLY);
|
||
|
if (srcfd < 0)
|
||
|
{
|
||
|
perror("open");
|
||
|
exit(1);
|
||
|
}
|
||
|
|
||
|
// 创建目标文件
|
||
|
dstfd = open(argv[2], O_WRONLY | O_CREAT | O_TRUNC, 0664);
|
||
|
if (dstfd < 0)
|
||
|
{
|
||
|
perror("open");
|
||
|
exit(1);
|
||
|
}
|
||
|
|
||
|
// 循环读取源文件,写入目标文件
|
||
|
while ((len = read(srcfd, buf, sizeof(buf))) > 0)
|
||
|
{
|
||
|
write(dstfd, buf, len);
|
||
|
}
|
||
|
|
||
|
// 关闭文件
|
||
|
close(srcfd);
|
||
|
close(dstfd);
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
// ./a.out srcfile dstfile
|