Linux IO系统编程中,通过重定向把99乘法表打印输出到文件,输出完成后复原重定向在屏幕上打印write OK
时间: 2024-05-04 18:20:40 浏览: 74
可以使用以下代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
int main() {
int fd;
if ((fd = open("result.txt", O_WRONLY | O_CREAT | O_TRUNC, 0666)) < 0) {
perror("open error");
exit(1);
}
int stdout_bak = dup(STDOUT_FILENO); // 备份标准输出流
if (dup2(fd, STDOUT_FILENO) < 0) { // 将标准输出流重定向到文件
perror("dup2 error");
exit(1);
}
// 打印99乘法表
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= i; j++) {
printf("%d*%d=%2d ", j, i, i * j);
}
printf("\n");
}
if (dup2(stdout_bak, STDOUT_FILENO) < 0) { // 恢复标准输出流
perror("dup2 error");
exit(1);
}
printf("write OK\n"); // 在屏幕上打印write OK
close(fd);
return 0;
}
```
首先,通过open函数创建或打开一个名为"result.txt"的文件,并将其文件描述符保存在fd中。若打开失败,则输出错误信息并退出程序。
接下来,通过dup2函数将标准输出流重定向到该文件。dup2函数会将第一个参数的文件描述符复制到第二个参数的文件描述符,并且会关闭第二个参数原有的文件描述符(如果有的话)。如果dup2执行成功,它会返回新的文件描述符,否则返回-1。若重定向失败,则输出错误信息并退出程序。
然后,使用两个for循环打印99乘法表。由于标准输出流已经被重定向到文件,因此打印的内容会被输出到文件中。
接着,通过dup2函数将标准输出流恢复为原来的流。这里我们需要备份一下标准输出流,因为后面需要恢复它。
最后,在屏幕上打印write OK,并关闭文件描述符fd。
这样,我们就实现了将99乘法表输出到文件,并在屏幕上打印write OK的功能。
阅读全文