在C中写入标准输出并从标准输入读取

在C中写入标准输出并从标准输入读取,c,pipe,C,Pipe,我正在写两个c文件,一个要写(通过stdout),另一个要读(通过stdin) 但是read代码总是挂起read(),我已经尝试过fread函数,但是没有用 有人能给出建议吗 写一个例子: int main() { char *a_string="Hello"; write(fileno(stdout), a_string, strlen(a_string)+1); return 0; } 阅读示例: int main() { char buffer[100

我正在写两个c文件,一个要写(通过stdout),另一个要读(通过stdin)

但是read代码总是挂起read(),我已经尝试过fread函数,但是没有用

有人能给出建议吗

写一个例子:

int main() {
    char *a_string="Hello";
    write(fileno(stdout), a_string, strlen(a_string)+1);

    return 0; 
}
阅读示例:

int main() {
    char buffer[100];
    read(fileno(stdin), buffer, 100-1);
    printf("buffer=%s\n", buffer);

    return 0;
}
您需要输入停止,在Linux中是Ctrl+D。

您需要输入停止,在Linux中是Ctrl+D

read代码总是挂起read(),我已经尝试过fread函数,但没有用

这是因为
read
fread
fgets
和类似功能不同,当用户输入换行符(按Enter键)时,不会退出读取。它将等待,直到读取EOF或读取指定的字节

要将EOF发送到
read
,必须按Ctrl+D

read代码总是挂起read(),我已经尝试过fread函数,但没有用

这是因为
read
fread
fgets
和类似功能不同,当用户输入换行符(按Enter键)时,不会退出读取。它将等待,直到读取EOF或读取指定的字节


要将EOF发送到
read
,您必须按Ctrl+D键。

查看一下,通常情况下,您的代码将挂起,直到按Enter键为止。而且字符串不会以零结尾。使用
fgets
进行读取,使用
fputs
进行写入。由于某种原因,我只想使用read()和write()。您使用
read
write
的原因是什么?你到底想做什么?请阅读以下内容:。并阅读以下内容:@黃思綸 如果希望它们进行通信,则不能单独运行它们。如果您不想使用管道,则必须使用其中一个。请查看您的代码通常会挂起,直到您按Enter键。而且字符串不会以零结尾。使用
fgets
进行读取,使用
fputs
进行写入。由于某种原因,我只想使用read()和write()。您使用
read
write
的原因是什么?你到底想做什么?请阅读以下内容:。并阅读以下内容:@黃思綸 如果希望它们进行通信,则不能单独运行它们。如果不想使用管道,则必须使用其中一个。在linux中,stdin和stdout是未命名管道。当您关闭管道的所有写描述符时,它会将EOF发送到此管道的读描述符。@nopasara我不认为这有什么特别的相关性。@MD XF可能没有,我以为他是在将两个程序管道连接在一起。第一个编写程序的例子是什么?这是一个手动输入的信号,当read()遇到这个信号时,它返回。在linux中,stdin和stdout是未命名的管道。当您关闭管道的所有写描述符时,它会将EOF发送到此管道的读描述符。@nopasara我不认为这有什么特别的相关性。@MD XF可能没有,我以为他是在将两个程序管道连接在一起。第一个编写程序的例子是什么?这是一个手动输入的信号,当read()遇到这个信号时,它返回。