今天, 我学习了 库函数 和 系统调用 的有关知识, 利用库函数写了一段程序, 用于实现Linux系统下的 复制(cp)功能。
程序:
#include<stdio.h>
int main(int argc, char* argv[3])
{
if (3 != argc)
{
printf("format: ./copy filename1 filename2\n");
return 1;
}
FILE* file1 = fopen(argv[1], "r");
if (NULL == file1)
{
perror("open1");
return 2;
}
FILE* file2 = fopen(argv[2], "w");
if(NULL == file2)
{
perror("open2");
fclose(file2);
return 3;
}
char* butter[1024] = {0};
while (!(feof(file1)))
{
int count = fread(butter, sizeof(void), 1024, file1);
if (ferror(file1))
{
perror("read");
fclose(file1);
fclose(file2);
clearerr(file1);
return 4;
}
int count2 = fwrite(butter, sizeof(void), count, file2);
if (0 == count2)
{
perror("write");
fclose(file1);
fclose(file2);
return 5;
}
}
fclose(file1);
fclose(file2);
return 0;
}
这个程序的精妙之处在于其利用了一个简单的循环, 解决了复制文件的大小的限制, 通过foef函数判断原文件是否被read到末尾。
但这个程序还有一些bug, 在今后学习了更多知识后, 会加以改进。