问题描述
在执行 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 (将#修改为@)