如何解决使用 dup2()
在执行 shell 程序时,我遇到了其中一个函数的问题。按比例缩小,它与内置函数的标准输入重定向有关。特别是,我正在实现一个内置函数来“暂停”系统,直到用户点击进入。由于这是从标准输入获取输入,如果我之前使用 dup2() 将标准输入重定向到另一个文件,它应该能够工作。我已经能够毫无问题地重定向 stdin 并从输入文件中读取,但我遇到的问题是在我“清理”并将 stdin 重置回其初始状态之后,我用 dup() 保存了该状态。>
问题不在于要重置的 dup2() 失败,因为我在较大的程序实现中有其他功能,它们以完全相同的方式重置 stdin 和 stdout,并且能够在此之后从 getline() 检索输入.
以下是我归结为一小部分的问题。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
int main(int argc,char ** argv){
char *input = NULL;
size_t len = 0;
int init;
int fd;
getline(&input,&len,stdin);
input = strtok(input,"\n");
if((fd = open(input,O_RDONLY)) == -1){
printf("error opening file\n");
}
if((init = dup(STDIN_FILENO)) == -1){
printf("error duping initial stdin\n");
}
if(dup2(fd,STDIN_FILENO) == -1){
printf("error duping fd\n");
}
close(fd);
while(getline(&input,stdin) != -1){
printf("%s\n",input);
}
close(0);
if(dup2(init,STDIN_FILENO) == -1){
printf("error!\n");
}
getline(&input,stdin);
printf("%s\n",input);
return 0;
}
cd ..
echo 3207
touch test.txt
ls -la | grep test
cat < test.txt > out.txt
ls -l >> test.txt
它应该在打印这些行后从键盘读取输入,但它只是再次打印最后一行并退出。任何建议表示赞赏!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。