环境:Vmware Workstation;CentOS-6.4-x86_64
说明:
通过结构体来实现struct stat实现文件的拷贝。
执行程序时的输入形式:程序名称 源文件路径及名称 目标文件路径及名称
实现将源文件中的内容完全拷贝到目标文件中。
代码如下:
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
int main(int argc, char *args[])
{
// 定义一个变量作为函数的返回值
int return_value = 0;
// 判断用户输入的参数是否符合要求
if (argc < 3)
{
printf("Message : Please input more arguments.\n");
return_value = -1;
return return_value;
}
// 得到文件名称:desfilename是目标文件,srcfilename是源文件
const char *srcfilename = args[1];
const char *desfilename = args[2];
// 打开文件
FILE *psrc = fopen(srcfilename, "r");
FILE *pdes = fopen(desfilename, "w");
// 判断打开文件是否成功
if (psrc == NULL)
{
printf("Message : %s open failed, %s\n", srcfilename, strerror(errno));
return_value = -1;
return return_value;
}
if (pdes == NULL)
{
printf("Message : %s open failed, %s\n", desfilename, strerror(errno));
return_value = -1;
return return_value;
}
// 创建文件缓冲区
char buf[1024];
// 循环读取并复制文件
while (1)
{
// 清空缓冲区内存
memset(buf, 0, sizeof(buf));
// 读取文件
size_t rc = fread(buf, sizeof(char), sizeof(buf), psrc);
// 判断是否读取到文件的末尾
if (rc <= 0)
break;
// 将缓冲区中的内容写入到文件
fwrite(buf, sizeof(char), rc, pdes);
}
// 关闭文件
fclose(psrc);
fclose(pdes);
return return_value;
}
PS:根据传智播客视频学习整理得出。