[英]Redirecting pipe from file to screen linux c
我有以下代码(在互联网上找到)
FILE *fp;
fp=fopen("text.txt","w");
int fd=open("text.txt",O_WRONLY,S_IWUSR);
dup2(fd,1);
此代码将管道从屏幕重定向到名为text.txt
的文件。
现在我需要做相反的事情。 我想将管道写入从此文件更改为屏幕。 有人有主意吗? 谢谢
该代码仅适用于某些将数据推入管道的情况。 如果您简单地颠倒guzintas和comzoutas的布线,情况就不会如此。 您需要打开文本文件进行读取,然后将其读入内存并将其写入屏幕。 有很多关于cat.exe克隆的源代码示例,请在GitHub上查找代码。
这是一个非常简单的示例:
#include <stdio.h>
void spewfile(FILE *fp)
{
char buf[BUFSIZ];
while(fgets(buf, sizeof(buf), fp))
fputs(buf, stdout);
}
在Linux上,您可以写入/dev/tty
,但这并不等同于恢复对stdout的写入,因为您可能无法重定向调用程序的输出(不确定-待测试),并且方式,我不确定这是否可以移植到其他基于Unix的系统。
int fd=open("/dev/tty",O_WRONLY);
dup2(fd,1);
否则,您应该在第一次重定向之前将文件描述符1复制到另一个文件描述符,以便以后可以恢复它。
/* save fd 1 */
int sav=dup(1);
/* redirect to file */
int fd=open("text.txt",O_WRONLY,S_IWUSR);
dup2(fd,1);
/* done anything you wanted here (redirected to text.txt) */
/* ... */
/* revert redirection */
dup2(sav,1);
/* do anything you want here (having reverted the redirection back to stdout) */
/* ... */
顺便说一句,应该避免同时使用缓冲的(fopen)和未缓冲的(开放)I / O。 这将导致问题,因为没有通知缓冲的I / O您同时使用无缓冲的I / O会执行的操作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.