linux 接收接盘输入的方式

方式一:利用select监控键盘文件/dev/tty

读取键盘文件“/dev/tty”的数据,其执行流程如下:
首先,打开键盘文件 fd = open("/dev/tty", O_RDONLY | O_NONB);
其次,利用select监控键盘文件的读状态 ret = select(fd, &fdsetR, NULL, NULL, timeout);
然后,利用read读取内容 read(fd, &buff, len);

测试代码如下:
 

#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <assert.h>

int main()
{
	int keyboard;
	int ret;
    ssize_t i;
	char buff[32];
	fd_set readfd;
	struct timeval timeout;
	keyboard = open("/dev/tty", O_RDONLY | O_NONBLOCK);
	assert(keyboard > 0);

	while(1)
	{
		timeout.tv_sec = 5;
		timeout.tv_usec = 0;

		FD_ZERO(&readfd);
		FD_SET(keyboard, &readfd);
		ret = select(keyboard + 1, &readfd, NULL, NULL, &timeout);

		if (ret == -1)
			perror("select error");
		else if (ret)
		{
			if (FD_ISSET(keyboard, &readfd))
			{
				i = read(keyboard, buff, 31);
			    buff[i]='\0';
				printf("the input is %s\n", buff);
				if (strncmp("exit", buff, 4) == 0)
					break;
			}
		}
		else if (ret == 0)
		{
			printf("time out\n");
		}
	}

    return 0;
}

方式二:利用预定义的文件描述符STDIN_FILENO

STDIN_FILENO属于系统API接口库,其声明为 int 型,是一个打开文件句柄,对应的函数主要包括 open/read/write/close 等系统级调用。
定义文件\include\unistd.h中,明确说明了是文件描述符
/* Standard file descriptors.  */
#define    STDIN_FILENO    0    /* Standard input.  */
#define    STDOUT_FILENO    1    /* Standard output.  */
#define    STDERR_FILENO    2    /* Standard error output.  */
对其用法,在博客《Linux中的STDIN_FILENO和STDOUT_FILENO》存在实例代码

方式三:利用stdin

stdin等是FILE *类型,属于标准I/O

对于还存在的其他方式,希望大家指出,补充。
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值