C 是否每个进程都将其标准DIN标准定义为键盘、终端等?
每个进程是否都有与键盘和终端关联的C 是否每个进程都将其标准DIN标准定义为键盘、终端等?,c,process,C,Process,每个进程是否都有与键盘和终端关联的stdin、stdout和stderr 我有一个小程序。我想将键盘输入替换为名为new.txt的文件。我该怎么做呢 FILE *file1 fopen("new.txt", "r") close(0); // close the stdio dup2(file1, 0); 这样行吗?现在我的stdio被重定向到文件?不,不是每个进程。但在提供命令行窗口输入的操作系统上,从该命令行启动的程序将把stdin连接到键盘,stdout和stderr都连接到终端 如果
stdin
、stdout
和stderr
我有一个小程序。我想将键盘输入替换为名为new.txt
的文件。我该怎么做呢
FILE *file1
fopen("new.txt", "r")
close(0); // close the stdio
dup2(file1, 0);
这样行吗?现在我的stdio
被重定向到文件?不,不是每个进程。但在提供命令行窗口输入的操作系统上,从该命令行启动的程序将把stdin连接到键盘,stdout和stderr都连接到终端
如果一个程序启动另一个程序,则通常第二个程序的标准流以某种方式连接到第一个程序;例如,第一个程序可能有一个开放描述符,通过它可以发送文本,并假装它是第二个进程的“键盘”。当然,详细信息因操作系统而异。不,不是每个进程都有。但在提供命令行窗口输入的操作系统上,从该命令行启动的程序将把stdin连接到键盘,stdout和stderr都连接到终端
如果一个程序启动另一个程序,则通常第二个程序的标准流以某种方式连接到第一个程序;例如,第一个程序可能有一个开放描述符,通过它可以发送文本,并假装它是第二个进程的“键盘”。当然,详细信息因操作系统而异。回答您的问题:
这样行吗
否。dup2()
在传递文件*
和int
时,接受两个文件描述符(int
s)。您不能像这样混合使用文件句柄(file*
s)和文件描述符(int
s)
可以使用open
而不是fopen
将文件作为文件描述符而不是文件句柄打开,也可以使用fileno
从文件句柄获取文件描述符。或者可以使用freopen
重新打开新文件的stdin
文件句柄
请注意,文件描述符(int
s)是POSIX操作系统的一部分,只能移植到其他POSIX系统,而文件句柄(file*
s)是C标准的一部分,可以移植到任何地方。如果使用文件描述符,则必须重写代码以使其在Windows上工作。回答您的问题:
这样行吗
否。dup2()
在传递文件*
和int
时,接受两个文件描述符(int
s)。您不能像这样混合使用文件句柄(file*
s)和文件描述符(int
s)
可以使用open
而不是fopen
将文件作为文件描述符而不是文件句柄打开,也可以使用fileno
从文件句柄获取文件描述符。或者可以使用freopen
重新打开新文件的stdin
文件句柄
请注意,文件描述符(int
s)是POSIX操作系统的一部分,只能移植到其他POSIX系统,而文件句柄(file*
s)是C标准的一部分,可以移植到任何地方。如果使用文件描述符,则必须重写代码才能在Windows上工作