gpt4 book ai didi

c - Fflush 不写入缓冲文本

转载 作者:行者123 更新时间:2023-11-30 16:52:42 26 4
gpt4 key购买 nike

我正在尝试使用以下代码将 2D 表格打印到我的终端:

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <termios.h>
#include <sys/wait.h>

char getch()
{
char ch;
struct termios old, new;
tcgetattr(0, &old); // grab old terminal i/o settings
new = old; // new settings = old settings
new.c_lflag &= ~ICANON; // disable buffered i/o
new.c_lflag &= ~ECHO; //set echo mode
tcsetattr(0, TCSANOW, &new); // use these new terminal i/o settings now
ch = getchar();
tcsetattr(0, TCSANOW, &old); //restore old settings
return ch;
}

void readPBM(char *output)
{
char tmp[1024];

int fd[2] = {0,0};
int pid;

//Open the pipe for inter-process communication
pipe(&fd[0]);

//Fork and test if we are child or parent process
pid = fork();
if(pid) //Parent process
{
wait(NULL); //Wait for child's end
close(fd[1]);//Close pipe's write stream
close(0);//Close stdin
dup(fd[0]);//Duplicate stdout
close(fd[0]);//Close old stdout

strcpy(output, "");// Init output at 0
while(fgets(tmp, 1024, stdin) != NULL) //Put remaining entry in output
{
strcat(output, tmp);
}
}
else if(pid == 0) //Child process
{
close(fd[0]);//Close pipe's read stream
close(1);//Close stdout
dup(fd[1]);//Duplicate stdin
close(fd[1]);//Close old stdin

printf("A random string ...\n");
}
else //Print error if fork failed
{
printf("Error creating a new process");
exit(EXIT_FAILURE);
}
}

int main(int argc, char *argv[])
{
int i, j;

char *str = NULL;
char c;

str = malloc(512 * sizeof(char*));

readPBM(str);

printf("%s", str);
fflush(stdout);
c = getch();
}

我有一个UNIX implementation of getch() .

我的问题是我的程序正在等待输入来打印表格。我尝试 fflush(stdout) 并使用 ICANON 禁用终端缓冲,但它仍然无法正常工作。

PS:它不适用于 getchar、scanf...

编辑:所以我想到了这个最小的例子;似乎与管道有关。

最佳答案

My problem is that my program is waiting for an input to print the table.

这是因为您忘记在完成工作后终止子进程,因此在将 A random string ... 打印到管道后,它会继续,从 readPBM() 返回 并最终在 main() 末尾执行 c = getch()。补救措施是在 if(pid == 0)//Child process block 末尾调用 exit(0)

关于c - Fflush 不写入缓冲文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41129695/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com