我试图找出dup2
的工作原理。我的目标只是复制标准输入并将其显示在标准输出上(如鹦鹉:))
我用文件做了一个非常基本的测试:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main (void){
FILE* fp= fopen("test.txt", "w");
int fildes = fileno(fp);
dup2(fildes, 1);
printf("Test\n");
close(fildes);
fclose(fp);
return EXIT_SUCCESS;
}
编辑文本没有出现在shell中,但我的文件保持为空。
这是有效的,我犯了一个错误。
我实现入口复制的想法是这样的:
#include <stdio.h>
#include <unistd.h>
typedef struct {
int read;
int write;
} pipe_t;
int main (void){
pipe_t my_pipe;
int pid;
if (( pipe((int *)&my_pipe)== -1) || ( (pid = fork()) == -1))
return 1;
if(pid > 0){
close(my_pipe.read);
dup2(my_pipe.write, 0);
int c;
do{
read(my_pipe.write, &c, 1);
write(my_pipe.write, &c, 1);
fflush(stdin);
}while(c != '.');
close(my_pipe.write);
}
else{
close(my_pipe.write);
dup2(my_pipe.read, 1);
int c;
do{
read(my_pipe.read ,&c, 1);
write(my_pipe.read, &c, 1);
fflush(stdout);
}while(c != '.');
close(my_pipe.read);
}
return EXIT_SUCCESS;
}
删除dup2的相同代码,read(my_pipe.write, &c, 1);
替换read(0, &c, 1);
,write(my_pipe.read, &c, 1);
替换write(1, &c, 1);
。
但是这个只是接受输入而什么都不做。
答案 0 :(得分:1)
我注意到你正在打开文件进行阅读,可能是你想打开它来写实际写入它。
fp = fopen("test.txt", "w")
你也不应该使用close()和fclose()来关闭文件。 fclose()更合适。