马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
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企服之家,中国第一个企服评测及商务社交产业平台。 |