相关疑难解决方法(0)

C非阻塞键盘输入

我正在尝试用C语言编写一个程序(在Linux上)循环,直到用户按下一个键,但不应该要求按键继续每个循环.

有一个简单的方法吗?我想我可以做到这一点,select()但这似乎很多工作.

或者,有没有办法在程序关闭之前捕获ctrl- ckeypress进行清理而不是非阻塞io?

c linux asynchronous input nonblocking

76
推荐指数
5
解决办法
10万
查看次数

stdin/stdout/stderr上的跨平台(linux/Win32)非阻塞C++ IO

我试图通过stdin/stdout找到非阻塞IO的最佳解决方案,具有以下特征:

  • 只要有足够的数据,就可以读入n- size的块.
  • 如果没有足够的数据,请读取部分块.
  • 如果没有可用数据,则阻塞直到有一些数据(即使它可能小于n).

目标是允许有效传输大型数据集,同时立即处理"控制"代码(而不是让它们在某处部分填充的缓冲区中逗留).

我知道我可以通过使用线程和istream :: get()循环,或者通过编写一堆特定于平台的代码来实现这一点(因为你不能在windows中的文件句柄上选择())......((那里也是istream :: readsome()看起来很有希望,但我在谷歌上找到的唯一结果是人们说它实际上并不好用.))

由于我没有对这些API做过多编码,也许有更好的方法.

c++ stdin iostream pipe nonblocking

8
推荐指数
1
解决办法
8539
查看次数

Linux C,为什么fcntl作用于STDIN也会影响STDOUT和STDERR?

fcntl我在对执行函数时遇到了问题stdin,当我将stdinFD 状态标志设置为时O_NONBLOCK,它运行良好,但有副作用。stdout 和 stderr 的状态标志也更改为O_NONBLOCK

fcntl我研究了函数、SYSCALL_DEFINE3和的源代码do_fcntl,但没有得到任何帮助。还有 stackoverflow 或 google。我认为这可能与内核或glibc的实现有关。

我的电脑是 x86_64 上的 Ubuntu 12.04,安装了 gcc 4.6.3。

  int flag = 0;
  int value = O_NONBLOCK;
  int fd = open("./tmp", O_RDONLY);

  if(-1 == (flag = fcntl(fd, F_GETFL)))
      fprintf(stdout, "%d:%s\n", errno, strerror(errno));

  flag = fcntl(stdin->_fileno, F_GETFL);
  flag = fcntl(stderr->_fileno, F_GETFL);
  if(-1 == (flag = fcntl(stdout->_fileno, F_GETFL)))
      fprintf(stdout, "%d:%s\n", errno, strerror(errno));

  flag = fcntl(stdout->_fileno, F_SETFL, flag | O_NONBLOCK);

  flag = …
Run Code Online (Sandbox Code Playgroud)

c linux

4
推荐指数
1
解决办法
3628
查看次数

无需按Enter即可从键盘读取输入

可能重复:
C/C++:从标准输入中捕获字符而不等待按下输入
如何在C中的Linux上进行非阻塞控制台I/O?

我试图用C语言编写一个程序,它处于一个恒定的循环中,但我需要能够在每个循环开始时从键盘接收输入,或者如果没有按下键则继续.

getchar()和_getch()都不够,因为它们都在等待输入.如果有人知道类似于_getch但不等待输入的函数,那将非常感激.

c prompt input delay

2
推荐指数
1
解决办法
9030
查看次数

标签 统计

c ×3

input ×2

linux ×2

nonblocking ×2

asynchronous ×1

c++ ×1

delay ×1

iostream ×1

pipe ×1

prompt ×1

stdin ×1