IT评测·应用市场-qidao123.com
标题:
C语言I/0请利用dup2 + fgets + printf 实现文件拷贝功能
[打印本页]
作者:
来自云龙湖轮廓分明的月亮
时间:
2025-1-26 09:14
标题:
C语言I/0请利用dup2 + fgets + printf 实现文件拷贝功能
1.代码结果展示:
2.源码剖析:
(1)备份标准输出流:利用 dup 备份标准输出流。
(2)打开文件:利用 fopen 打开源文件,利用 open 打开目标文件。
(3)重定向文件形貌符:利用 dup2 将目标文件的文件形貌符重定向到标准输出。
(4)读取和写入数据:利用 fgets 从源文件读取数据,利用 printf 将数据写入目标文件。
(5)关闭文件:关闭文件并规复标准输出流。
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
int main(int argc, const char *argv[]) {
int STDOUT = dup(1); // 备份标准输出流
char *ch = "book"; // 文件名 被复制的文件
char *ch_bak = "book_bak"; // 文件名 复制到该文件
FILE *rfp = fopen(ch, "r");
if (rfp == NULL) {
perror("tips: 文件 book 打开失败\n");
return 1;
}
int wfp = open(ch_bak, O_WRONLY | O_CREAT | O_TRUNC, 0644);
if (wfp == -1) {
perror("tips: 文件 book_bak 打开失败\n");
fclose(rfp);
return 1;
}
dup2(wfp, 1); // 重定向,将标准输出重定向到文件 book_bak
char buf[1024]; // 用于存放读取到的内容
while (fgets(buf, sizeof(buf), rfp) != NULL) {
printf("%s", buf); // 输出到重定向后的文件
fflush(stdout); // 刷新,写入到文件
}
// 恢复标准输出流
dup2(STDOUT, 1);
close(STDOUT);
close(wfp);
fclose(rfp);
printf("tips: 文件复制完毕,于 %s 文件中查看效果\n", ch_bak);
return 0;
}
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/)
Powered by Discuz! X3.4