我工作的分配,其中一个程序把文件描述符作为参数(一般在exec调用父),并从文件中读取和写入文件的描述符,并在我的测试中,我意识到,程序会工作从命令行开始,如果我使用0,1或2作为文件描述符,则不会出错.这对我来说很有意义,除了我可以写入stdin并让它显示在屏幕上.
对此有解释吗?我一直认为在stdin/stdout上有一些保护,你当然不能从stdout到stdin或fgetsf.
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
int main()
{
char message[20];
read(STDOUT_FILENO, message, 20);
write(STDIN_FILENO, message, 20);
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我想在每次单独击键到stdin之后将用户的击键直接发送到一个通道.
我尝试过下面的代码,但这并没有给出所需的结果,因为reader.ReadByte()方法会阻塞,直到输入换行符.
func chars() <-chan byte {
ch := make(chan byte)
reader := bufio.NewReader(os.Stdin)
go func() {
for {
char, err := reader.ReadByte()
if err != nil {
log.Fatal(err)
}
ch <- char
}
}()
return ch
}
Run Code Online (Sandbox Code Playgroud)
感谢您提供有关如何让每个用户输入字符立即转到频道而不需要换行符的任何建议.