4-2:实现cp命令
#include <stdio.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>
#define BUF_SIZE 1024
void cp(char *filename1, char *filename2)
{
int fd1 = open(filename1, O_RDONLY);
if (fd1 == -1) {
printf("fail to open %s:%s\n", filename1, strerror(errno));
return;
}
int fd2 = open(filename2, O_WRONLY | O_APPEND | O_CREAT, 0664);
char szBuf[BUF_SIZE];
int bytes;
while(1) {
memset(szBuf, 0, BUF_SIZE);
bytes = read(fd1, szBuf, BUF_SIZE);
if (bytes == 0) {
break;
}
write(fd2, szBuf, bytes);
}
}
int main(int argc, char **argv)
{
if (argc != 3 || !strcmp(argv[1], "--help")) {
printf("Usage:%s [Src] [Dest]\n", argv[0]);
printf("\tSrc:Source file\n");
printf("\tDest:Destin file\n");
return 0;
}
cp(argv[1], argv[2]);
return 0;
}
待加强:如果要复制一个包含空洞(连续的空字节)的普通文件,并且要求目标文件的空洞与源文件保持一致。

浙公网安备 33010602011771号