首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

getch 和 putchar 没有返回就不能工作

getch 和 putchar 没有返回就不能工作

getch 和 putchar 是 C 语言中用于从标准输入读取字符和向标准输出写入字符的函数。在标准输入和输出被阻塞的情况下,这两个函数不会立即返回,而是等待用户输入或输出完成。

原因

在标准输入和输出被阻塞时,如果 getch 和 putchar 函数没有返回,它们将继续阻塞进程,阻止其他 I/O 操作。因此,在需要读取或写入多个字符时,我们需要使用非阻塞 I/O 或者 select()、poll() 等 I/O 多路复用函数。

解决方案

使用非阻塞 I/O 或者 I/O 多路复用函数来避免阻塞。例如,在 Linux 系统中,可以使用 fcntl() 函数将文件描述符设置为非阻塞模式。在 Windows 系统中,可以使用 open()read() 函数将文件描述符设置为非阻塞模式。

示例

代码语言:c
复制
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>

int main() {
    int fd; // 文件描述符
    char c;
    
    fd = open("example.txt", O_RDONLY);
    if (fd < 0) {
        perror("open");
        return 1;
    }
    
    // 将文件描述符设置为非阻塞模式
    fcntl(fd, F_SETFL, O_RDONLY | O_NONBLOCK);
    
    while (1) {
        if (read(fd, &c, 1) == 0) {
            // 文件已关闭或无剩余字符
            break;
        }
        printf("Read: %c
", c);
    }
    
    close(fd);
    return 0;
}

在上面的示例中,我们使用 fcntl() 函数将文件描述符设置为非阻塞模式。如果读取文件结束或没有剩余字符,则文件描述符将返回 EAGAIN 错误。我们使用 while 循环不断读取字符,直到文件结束或无剩余字符。

总之,在 getch 和 putchar 没有返回就不能工作的情况下,我们需要使用非阻塞 I/O 或者 I/O 多路复用函数来避免阻塞,以确保程序的正确运行。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

4分40秒

【技术创作101训练营】Excel必学技能-VLOOKUP函数的使用

14分12秒

我在 SAP 成都研究院工作 16 年的一些经历分享

1分36秒

工作服反光衣ai视频识别系统

1分29秒

高空作业安全带佩戴识别检测系统

1分16秒

安全带佩戴识别高空作业

11分41秒

ABAP 会过时吗?聊聊 ABAP 的过去,现在,和将来

1分16秒

安全帽佩戴智能识别系统

9分12秒

运维实践-在ESXI中使用虚拟机进行Ubuntu22.04-LTS发行版操作系统与密码忘记重置

11分30秒

在一个除了自己之外其他同事全在国外的全球化开发团队工作,是一种什么样的体验

52秒

衡量一款工程监测振弦采集仪是否好用的标准

1分30秒

基于强化学习协助机器人系统在多个操纵器之间负载均衡。

1分19秒

振弦传感器智能化:电子标签模块

领券