中山网站制作服务,公司做环评的网站,寿光市住房和建设局网站,企业网站开发工资思路
将源文件的内容读取到内存中#xff0c;然后将这些内容写入到目标文件。
1: 打开源文件、目标文件
fopen() 以读模式打开源文件。 open ()以写模式打开目标文件。
2: 读取源文件、写入目标文件
fgets ()从源文件中读取内容。 printf ()将内容写入目标文件。 printf…思路
将源文件的内容读取到内存中然后将这些内容写入到目标文件。
1: 打开源文件、目标文件
fopen() 以读模式打开源文件。 open ()以写模式打开目标文件。
2: 读取源文件、写入目标文件
fgets ()从源文件中读取内容。 printf ()将内容写入目标文件。 printf 默认写入标准输出。所以用 dup2() 重定向 标准输出到目标文件。
3: 关闭文件
fclose ()关闭源文件 close ()关闭目标文件
代码 // 检查命令行参数数量if (argc ! 3) {fprintf(stderr, 使用方法: %s 源文件 目标文件\n, argv[0]);return 1;}// 打开源文件,目标文件FILE* rf fopen(argv[1],r);int wfd open(argv[2],O_WRONLY|O_CREAT|O_TRUNC,0664);//如果文件不存在它将被创建如果存在它将被覆盖。// 保存原始的标准输出文件描述符int stdout_backup dup(1);// 标准输出重定向到目标文件dup2(wfd,1);// 读取源文件内容并写入到重定向后的标准输出即目标文件char buf[2];while(fgets(buf,2,rf)!NULL)//fgets 会读取一行直到换行符或文件结束{//fgets读取的每行内容都含换行符确保换行符也被写入目标文件。printf(%c,buf[0]);}fflush(stdout);// 恢复标准输出dup2(stdout_backup,1);// 关闭文件fclose(rf);close(wfd);
运行结果 升级代码做错误处理 // 打开源文件FILE *rf fopen(argv[1], r);if (rf NULL) {perror(打开源文件失败);return 1;}// 创建或打开目标文件int wfd open(argv[2], O_WRONLY | O_CREAT | O_TRUNC, 0664);if (wfd -1) {perror(打开目标文件失败);fclose(rf);return 1;}// 保存原始的标准输出文件描述符int stdout_backup dup(1);if (stdout_backup -1) {perror(备份标准输出失败);fclose(rf);close(wfd);return 1;}// 将标准输出重定向到目标文件if (dup2(wfd, 1) -1) {perror(重定向标准输出失败);fclose(rf);close(wfd);return 1;}// 读取源文件内容并写入到重定向后的标准输出即目标文件char buf[1024];while (fgets(buf, sizeof(buf), rf) ! NULL) {printf(%s, buf);}fflush(stdout);// 恢复标准输出if (dup2(stdout_backup, 1) -1) {perror(恢复标准输出失败);// 不再关闭 rf 和 wfd因为错误处理可能需要更复杂的逻辑return 1;}close(stdout_backup);// 关闭文件fclose(rf);close(wfd);