getchar linux 下c 检测方向键,linux C之getchar()非阻塞方式

广州嵌入式培训班的小编这一期给大家讲linux C之getchar()非阻塞方式。

#include

"../include/CommUart.h"

#include

"ComCommon.h"

#include

#include

#include

#include

#include

#include

#include

#include

using namespace

std;

#define

USR_DEBUG

static struct

termios ori_attr, cur_attr;

static

__inline int tty_reset(void)

{

if (tcsetattr(STDIN_FILENO, TCSANOW,

&ori_attr) != 0)

return -1;

return 0;

}

static

__inline int tty_set(void)

{

if ( tcgetattr(STDIN_FILENO, &ori_attr)

)

return -1;

memcpy(&cur_attr, &ori_attr,

sizeof(cur_attr) );

cur_attr.c_lflag &= ~ICANON;

//       cur_attr.c_lflag |= ECHO;

cur_attr.c_lflag &= ~ECHO;

cur_attr.c_cc[VMIN] = 1;

cur_attr.c_cc[VTIME] = 0;

if (tcsetattr(STDIN_FILENO, TCSANOW,

&cur_attr) != 0)

return -1;

return 0;

}

static

__inline int kbhit(void)

{

fd_set rfds;

struct timeval tv;

int retval;

/* Watch stdin (fd 0) to see when it has

input. */

FD_ZERO(&rfds);

FD_SET(0, &rfds);

/* Wait up to five seconds. */

tv.tv_sec = 0;

tv.tv_usec = 0;

retval = select(1, &rfds, NULL, NULL,

&tv);

/* Don't rely on the value of tv now! */

if (retval == -1) {

perror("select()");

return 0;

} else if (retval)

return 1;

/* FD_ISSET(0, &rfds) will be true. */

else

return 0;

return 0;

}

int main(int

argc, char*argv[]) {

//非阻塞getChar初始化

int tty_set_flag;

tty_set_flag = tty_set();

char com_num[3] = {0};

if (argc < 2) {

printf("please enter com

um:\n");

scanf("%c", &com_num);

} else {

// com_num = *argv[1];

strcpy(com_num, argv[1]);

}

#ifdef USR_DEBUG

printf("main entry\n");

#endif //

USR_DEBUG

CComCommon *m_pComUart = new CCommUart;

#ifdef USR_DEBUG

printf("create CCommUart\n");

#endif //

USR_DEBUG

char sendStr[256] = {0};

strcpy(sendStr, "/dev/ttyS100");

strcat(sendStr, com_num);

strcat(sendStr, ",115200,8,1,n");

//

m_pComUart->InitComComm("/dev/ttyS1001,115200,8,1,n");

m_pComUart->InitComComm(sendStr);

//

strcat(sendStr,"kkkkkkkkkkkkkkkkkk");

// 写入文件

FILE * pFile;

char fileName[124] = {0};

sprintf(fileName,"readData_dir/%s.txt",com_num);

pFile = fopen (fileName, "w");

char Rbuff[256] = {0};

int nsize = 0;

int i = 0;

int nCnt = 0;

while (1) {

/*********************发送测试*******************************/

//

m_pComUart->SendBuff(buff,sizeof(buff));

//

m_pComUart->SendStr("1234567887654321abcdefgh");

//

m_pComUart->SendStr("kkkkkkkkkkkkkkkkkk");

if (kbhit()) {

const int key = getchar();

// printf("%c pressed\n",

key);

if (key == 'q')

break;

} /*else {

fprintf(stderr, "

detected>\n");

}*/

/*********************接收的测试案例*************************/

memset(Rbuff, 0, 256);

nsize = m_pComUart->GetData(Rbuff, 256, 1000);

if (nsize > 0)

{

printf("nsize:%d\n", nsize);

// if(nCnt==10){

for (i = 0; i < nsize; i++)

{

// printf("%02x ",

(unsigned char)Rbuff[i]);

fprintf(pFile, "%02x",

(unsigned char)Rbuff[i]);

if (nCnt == 7) {

fprintf(pFile, "\n");

nCnt = 0;

} else {

nCnt++;

}

}

//二进制输入

// fwrite (Rbuff , sizeof(char),

sizeof(Rbuff), pFile);

//   nCnt = 0;

// }else{

//   nCnt++;

// }

printf("\n");

// printf("%s\n", Rbuff);

}

// printf("rec buff data:%s\n",

Rbuff);

// printf("get char: %d\n", m_pComUart->GetChar(10));

// sleep(1);

// usleep(1000);

}

delete m_pComUart;

fclose (pFile);

//线程的操作

if (tty_set_flag == 0)

tty_reset();

}

了解详情请登陆广州达内嵌入式培训官网(gz.arm.tedu.cn)!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值