使用 "freopen" 后如何将 stdin 改回从终端读取(在 C 中)?
How to change stdin back to reading from terminal after using "freopen" (in C)?
我使用 freopen 将 stdin 重定向到从文件中读取,它工作得很好
FILE *fp = freopen(args[index + 1], "r", stdin);
if(fp == NULL){
printf("file not found\n");
return 1;
}
之后我做了一些处理,想返回到终端读取,但我似乎不知道该怎么做。
我正在使用 fclose
关闭文件
fclose(fp);
我也尝试关闭 stdin,但没有什么不同。
fclose(stdin);
我试过
int savedStdIn = dup(0);
在 freopen 和
之前
dup2(savedStdIn, 0);
在代码末尾(连同 fclose(fp)),但这也不起作用。
你们很亲近:
// before reopen
int savedStdIn = dup(fileno(Stdin));
freopen(...) ;
...
// restore stdin
fclose(Stdin) ;
stdin = fdopen(savedStdIn, “r”)
...
理论上,close/dup 方法可以工作,前提是您刷新缓冲区。这是有风险的,并且依赖于实现,因为它试图通过访问系统调用来绕过工作室库调用。
// before reopen
int savedStdIn = dup(fileno(Stdin));
freopen(...) ;
...
// restore stdin
fflush(stdin):
Dup2(SavedstdIn), fileno(stdin))
我使用 freopen 将 stdin 重定向到从文件中读取,它工作得很好
FILE *fp = freopen(args[index + 1], "r", stdin);
if(fp == NULL){
printf("file not found\n");
return 1;
}
之后我做了一些处理,想返回到终端读取,但我似乎不知道该怎么做。
我正在使用 fclose
关闭文件fclose(fp);
我也尝试关闭 stdin,但没有什么不同。
fclose(stdin);
我试过
int savedStdIn = dup(0);
在 freopen 和
之前dup2(savedStdIn, 0);
在代码末尾(连同 fclose(fp)),但这也不起作用。
你们很亲近:
// before reopen
int savedStdIn = dup(fileno(Stdin));
freopen(...) ;
...
// restore stdin
fclose(Stdin) ;
stdin = fdopen(savedStdIn, “r”)
...
理论上,close/dup 方法可以工作,前提是您刷新缓冲区。这是有风险的,并且依赖于实现,因为它试图通过访问系统调用来绕过工作室库调用。
// before reopen
int savedStdIn = dup(fileno(Stdin));
freopen(...) ;
...
// restore stdin
fflush(stdin):
Dup2(SavedstdIn), fileno(stdin))