实现代码:
#include <myhead.h>
int main(int argc, const char *argv[])
{
//判断传入的文件个数
if (argc != 3)
{
write(2, "input file error\n", sizeof("input file error\n"));
return -1;
}
//以只读的形式打开源文件
int srcfd = open(argv[1], O_RDONLY);
if (srcfd == -1)
{
perror("open srcfile error");
return -1;
}
//以只写的形式打开目标文件
int destfd = open(argv[2], O_WRONLY | O_CREAT | O_TRUNC, 0777);
if (destfd == -1)
{
perror("open destfile error");
return -1;
}
//定义搬运工
char buf[128] = "";
while (1)
{
int src = read(srcfd, buf, sizeof(buf));
if (src == 0)
{
break;
}
//大小写转换
for (int i = 0; i < strlen(buf); i++)
{
if (buf[i] >= 'A' && buf[i] <= 'Z')
buf[i] += 32; //测试一下大写 ABCDEFGHI
else if (buf[i] >= 'a' && buf[i] <= 'z')
buf[i] -= 32;
}
//将读取的数据全部写入到新文件中
printf("运行一次\n");
write(destfd, buf, src);
}
printf("拷贝成功\n");
//关闭文件
close(srcfd);
close(destfd);
return 0;
}
运行结果:
./copy copy.c test.txt
运行一次
运行一次
运行一次
运行一次
运行一次
运行一次
运行一次
运行一次
运行一次
拷贝成功
“加密”文件:
#INCLUDE <MYHEAD.H>
INT MAIN(INT ARGC, CONST CHAR *ARGV[])
{
//判断传入的文件个数
IF (ARGC != 3)
{
WRITE(2, "INPUT FILE ERROR\N", SIZEOF("INPUT FILE ERROR\N"));
RETURN -1;
}
//以只读的形式打开源文件
INT SRCFD = OPEN(ARGV[1], o_rdonly);
IF (SRCFD == -1)
{
PERROR("OPEN SRCFILE ERROR");
RETURN -1;
}
//以只写的形式打开目标文件
INT DESTFD = OPEN(ARGV[2], o_wronly | o_creat | o_trunc, 0777);
IF (DESTFD == -1)
{
PERROR("OPEN DESTFILE ERROR");
RETURN -1;
}
//定义搬运工
CHAR BUF[128] = "";
WHILE (1)
{
INT SRC = READ(SRCFD, BUF, SIZEOF(BUF));
IF (SRC == 0)
{
BREAK;
}
//大小写转换
FOR (INT I = 0; I < STRLEN(BUF); I++)
{
IF (BUF[I] >= 'a' && BUF[I] <= 'z')
BUF[I] += 32; //测试一下大写 abcdefghi
ELSE IF (BUF[I] >= 'A' && BUF[I] <= 'Z')
BUF[I] -= 32;
}
//将读取的数据全部写入到新文件中
PRINTF("运行一次\N");
WRITE(DESTFD, BUF, SRC);
}
PRINTF("拷贝成功\N");
//关闭文件
CLOSE(SRCFD);
CLOSE(DESTFD);
RETURN 0;
}