在下面的代码中
int main ()
{
printf ("dup2 example!\n");
int myfd= creat ( "./etest.txt", 777);
dup2(myfd, 1);
printf("i am in output file!\n" );
dup2(1,1);
printf("i am in STDOUT!" );
return 0;
}
我有两个dup2调用。第一个命令将o/p从stdout重定向到我的文件。这可以很好地工作。然后,我想将它重定向到stoud,但是第二个dup2没有改变它,
所以如果我这么做了:
dup2(0, backup); // backup stdin
dup2(somefile, 0); // somefile has four lines of content
fgets(...stdin); // consume one line
fgets(....stdin); // consume two lines
dup2(backup, 0); // switch stdin back to keyboard
我发现在这一点上..stdin仍然包含我没有使用过的两行代码。为什么会这样呢?因为无论重定向多少次都只有一个缓冲区?当我想要返回到某个文件流中时,
我对linux很陌生,所以。我不能让我的脚本工作。我只是猜测,程序在执行tr函数时被挂起了。
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
int main()
{
int pdesc[2];
pipe(pdesc);
int a = fork();
if (a == 0) // child
{
dup2(pdesc[1],1); // chaning std_out to pipes_out
execlp("ls", "ls
if (out) {
out = 0;
int fd = open(output_file, O_WRONLY | O_CREAT, S_IRUSR | S_IWUSR);
if (fd == -1) perror("open for writing");
if (dup2(fd, STDOUT_FILENO) < 0) { perror("dup2"); abort();}
close(fd);
}
if (
我正在尝试用另一个管道替换stdin,然后将原始stdin放回fd #0。 例如: dup2(p, 0); // p is a pre-existing fd of a pipe
exec(/* some commands */);
//what will be here in order to have the original stdin back?
scanf(...) //continue processing with original stdin.
std::string example;
int fd = open(argv[1], O_RDONLY); //open file on file descriptor
int newfd = dup2(fd, 0);
//do stuff with file one then open file two
std::cin >> example;
std::cout << example << std:endl;
int fd2 = open(argv[2], O_RDONLY); //open file2 on file descriptor