gpt4 book ai didi

c - 如何以编程方式停止从标准输入读取?

转载 作者:行者123 更新时间:2023-12-01 11:07:16 25 4
gpt4 key购买 nike

当文件描述符上没有数据时,fgetc() 和其他输入函数可以返回。这可以通过在键盘上键入 Ctrl-D(至少在 Unix 上)从标准输入读取的控制台应用程序进行模拟。但如何以编程方式做到这一点呢?例如,如何从以下代码中的读取器线程中的 fgetc() 返回(注意:忽略可能的竞争条件)?

#include <pthread.h>
#include <stdio.h>

void* reader()
{
char read_char;
while((read_char = fgetc(stdin)) != EOF) {
;
}

pthread_exit(NULL);
}

int main(void)
{
pthread_t thread;
pthread_create(&thread, NULL, reader, NULL);

// Do something so the fgetc in the reader thread will return

pthread_exit(NULL);
}

谢谢!

最佳答案

您似乎希望线程在发生某些事件时停止阻塞 fgetc(stdin) 来处理该事件。如果是这种情况,您可以在 stdin 和其他一些消息管道上使用 select() ,以便线程可以处理来自两者的输入:

fd_set descriptor_set
FD_ZERO(&descriptor_set);
FD_SET(STDIN_FILENO, &descriptor_set);
FD_SET(pipefd, &descriptor_set);

if (select(FD_SETSIZE, &descriptor_set, NULL, NULL, NULL) < 0)
{
// select() error
}

if (FD_ISSET(STDIN_FILENO, &descriptor_set)) {
// read byte from stdin
read(STDIN_FILENO, &c, 1);
}

if (FD_ISSET(pipefd, &descriptor_set))
// Special event. Do something else

另请注意,进程中只能有一个线程从 stdin 读取数据。

关于c - 如何以编程方式停止从标准输入读取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4184257/

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