当前位置:  技术问答>linux和unix

【新手提问】命令行的程序如何接收键盘消息?

    来源: 互联网  发布时间:2016-05-22

    本文导语:  linux下,一个main函数 main函数内部处理一些事情,希望在键盘消息到达时候能够使用回调函数的方式通知程序。 类似于中断的那种 高手指点一下啊 | 使用异步io 在4 . 3 + B S D中,异步I /...

linux下,一个main函数

main函数内部处理一些事情,希望在键盘消息到达时候能够使用回调函数的方式通知程序。

类似于中断的那种

高手指点一下啊

|
使用异步io
在4 . 3 + B S D中,异步I / O是两个信号S I G I O和S I G U R G的组合。前者是通用异步I / O信号,后
者则只被用来通知进程在网络连接上到达了非规定波特率的数据。
为了接收S I G I O信号,需执行下列三步:
(1) 调用s i g n a l或s i g a c t i o n为该信号建立一个信号处理程序。
(2) 以命令F _ SETOWN调用f c n t l来设置进程I D和进程组I D,它们将接收对于
该描述符的信号。
(3) 以命令F _ S E T F L调用f c n t l设置O_ASYNC状态标志,使在该描述符上可以进行异步I / O

第( 3 )步仅用于指向终端或网络的描述符,这是4 . 3 + B S D异步传输设施的一个基本的限制。
对于S I G U R G信号,只需执行第( 1 )步和第( 2 )步。该信号仅对于指向支持带外数据的网络连
接的描述符而产生。

可根据需要决定是否把终端设置成杂收模式。



#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

int tty_mode(int how)
{
static struct termios original_mode;
if(how==0)
 tcgetattr(0,&original_mode);
else return tcsetattr(0,TCSANOW,&original_mode);
}
void set_crmode()
{
struct termios ttystate;
tcgetattr(0,&ttystate);
ttystate.c_lflag &= ~ICANON;
ttystate.c_lflag &=~ECHO;
ttystate.c_cc[VMIN]=1;
tcsetattr(0,TCSANOW,&ttystate);
}

int signal_io(int sig)
{
char buf[10];
printf("aaaan");
read(0,buf,sizeof(buf));
printf("bbb %sn",buf);
}
int main()
{
int flag=0;
tty_mode(0);
set_crmode();
signal(SIGIO,signal_io);
fcntl(0,F_SETOWN,getpid());
flag=fcntl(0,F_GETFL);
fcntl(0,F_SETFL,flag|O_ASYNC);
while(1)
pause();
tty_mode(1);
}

    
 
 

您可能感兴趣的文章:

  • linux串口无法接收数据(linunx新手求救)
  • linux新手提问, .sh文件的写法提问。 从.bat文件转为.sh文件。
  • 新手提问:如何在VJ中引用swing类库,
  • 新手提问:javac时出错
  • jsp新手提问
  • 新手提问!请大家回答!
  • 新手提问,给分
  • 新手提问,望各位高手赐教,谢了:)
  • 新手提问?
  • 两个网络问题,新手提问。
  • 新手提问,怎样解开zip包,linux下
  • 新手提问--1
  • 如何安装linux?新手提问
  • 新手提问 在线等待,为什么我的程序中 new 操作符出错?
  • LINUX新手提问,如何在LINUX下添加语言项?
  • 新手提问:运行一个可执行文件的问题?
  • 新手提问:有没有快捷的办法找到一个结构的定义(比如FILE, acct等)
  • ********新手提问,请各位随便看看*******
  • 新手提问:为什么看不到图形界面
  • 刚接触linux的新手的提问?
  • 新手提问
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 用什么命令可以从命令界面转到图形界面??我是新手!!!十分感谢十分感谢十分感谢!!!
  • 新手求教:关于ftp命令的问题,请大家帮帮忙
  • 新手相问一个比较偏僻的问题。 怎么在终端里执行一串命令行, 不是单独命令。跟shell有关。
  • 【新手提问】在XWindows下,有没有一个程序可以开一个窗口来运行命令行?
  • [新手提问]请问在命令行下追踪程序输出信息的方法
  • 新手问题:求一句TAR命令
  • 新手问题:怎么从从命令行方式进入窗口方式?
  • 新手问问mail命令的使用问题
  • 新手:unix下建立文件的命令?
  • 新手问一个简单问题:用什么命令来结束自己编写的服务端程序
  • 新手问题(登入UNIX后怎么进入C SHELL编程,命令是什么)
  • 新手,用ubuntu,只能强制关机,命令不行啊。。。。。
  • 新手问题:linux的安全事件和系统事件有没有什么文件可查,或者命令查?知道的都来答啊~~~~~~~~
  • 新手问题:怎样取得命令行参数?
  • 请教cat tail命令,小弟我是新手
  • 新手,请教MAKE命令
  • 新手如何加入开源项目 有什么好的c++,java 开源适合新手 请指点!
  • JDBC的问题,新手高手都来看看吧,说不定能帮帮我这个新手呢,谢谢!
  • 想找共同学习Linux的新手,一起学习,共同成长
  • 新手关于驱动开发的疑问
  • 新手有关linux的问题!
  • 新手急求~~~~~~~~~~~~~~~~~~~
  • 新手学习该用哪个版本
  • 面向新手的终端辅助工具 Clicompanion
  • 我是个新手,请各位老兄给介绍基本好书?
  • 新手请教啦~~能不能帮忙推荐几本书
  • 我是新手
  • 新手:用WEB页面修改数据库中的表?
  • Java新手上路之问题
  • 我是一名新手,请问如何学java
  • (新手)这里怎么看到300篇以外的所有文章?(不是搜索)


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3