|
我发现stdin可以重定向到文件,然后还可以再恢复成键盘.但是stdout重定向成文件就不能恢复了,不知为什么请大家解决.
下面的第一段程序可以证明stdin重定向可以恢复(运行前需要在相同目录下建立一个叫tt.txt的文本文件,再在里面随便写点东西)
[code:1]#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int main()
{
char a[32],b[32];int fd;
ll(&fd);
scanf("%s",a);
printf("%s\n",a);
fflush(stdin);
fclose(stdin);
stdin=fdopen(1,"r");
scanf("%s",b);
printf("%s\n",b);
return 0;
}
void ll(int *fd)
{
*fd=open("tt.txt",O_RDONLY);
fclose(stdin);
stdin=fdopen(*fd,"r");
}
[/code:1]
下面的第二段程序在重新打开屏幕的文件描述符的时候总是遇到毛病.不知怎么回事
[code:1]#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <readline/readline.h>
#include <readline/history.h>
int main()
{
int fdin,fdout;char *a;
if(creat("tt",O_CREAT|O_TRUNC|O_WRONLY)==-1)
{
printf("create file error!\n");
exit(0);
}
fdin=open("tt",O_RDONLY);
fdout=open("tt",O_WRONLY);
fclose(stdout);
fclose(stdin);
if((stdout=fdopen(fdout,"w"))==NULL)
{
exit(0);
}
if((stdin=fdopen(fdin,"r"))==NULL)
{
exit(0);
}
printf("test test\n");
fflush(stdout);
a=readline(NULL);
fclose(stdout);
if((stdout=fdopen(0,"w+"))==NULL)
exit(0);
printf("%s",a);
return 0;
}
[/code:1] |
|