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

Linux 下非阻塞模式的简单问题,各位帮帮小弟

    来源: 互联网  发布时间:2016-07-01

    本文导语:  #include  #include  #include  #include  #define ASK "Do you want another transaction" #define TRIES 3 #define SLEEPTIME 2 #define BEEP putchar('a') main(){ int response; tty_mode(0); set_cr_mode(); /// set_nodelay_mode(); response=get_response(ASK,TRIES); tty_mode(1); ret...


#include 
#include 
#include 
#include 

#define ASK "Do you want another transaction"
#define TRIES 3
#define SLEEPTIME 2
#define BEEP putchar('a')

main(){
int response;
tty_mode(0);
set_cr_mode();
/// set_nodelay_mode();
response=get_response(ASK,TRIES);
tty_mode(1);
return response;
}

get_response(char *question,int maxtries){
int input;
printf("%s (y/n)?",question);
fflush(stdout);
while(1){
input=tolower(get_ok_char());
if(input == 'y')
return 0;
if(input == 'n')
return 1;
if(maxtries-- == 0)
return 2;
BEEP;
}
}

get_ok_char(){
int c;
while((c=getchar())!=EOF && strchr("yYnN",c) == NULL)
;
return c;
}

set_cr_mode(){
struct termios ttystate;
tcgetattr(0,&ttystate);
ttystate.c_lflag &= ~ICANON;
ttystate.c_lflag &= ~ECHO;
ttystate.c_cc[VMIN] = 1;
ttystate.c_cc[VTIME] = 20;
tcsetattr(0,TCSANOW,&ttystate);
}

tty_mode(int how){
static struct termios original_mode;
static int original_flags;
if(how==0){
tcgetattr(0,&original_mode);
original_flags = fcntl(0,F_GETFL);
}
else{
tcsetattr(0,TCSANOW,&original_mode);
fcntl(0,F_SETFL,original_flags);
}
}



我的目的是等带用户输入,两秒过去后,若无输入,程序自动退出~~

可是它现在不能退出,我不知错在哪?各位帮帮忙~~

|
不要用getchar();
用:
   fd_set fds;
   struct timeval timeout;
   int rc, result;

   /* Set time limit. */
   timeout.tv_sec = 2;
   timeout.tv_usec = 0;
   FD_ZERO(&fds);
   FD_SET(STDIN, &fds);
   rc = select(STDIN + 1, &fds, NULL, NULL, &timeout);
   if (rc==-1)
   {
      perror("select failed");
      return -1;
   }

|
你的代码中哪有sleep后退出的实现部分?
#define SLEEPTIME 2都没用到。。

|
用select控制最方便,建议使用

|
终端控制不熟,不过我觉得可以用select来实现,你只需要判断标准输入是否可读即可。

    
 
 

您可能感兴趣的文章:

  • Linux下read函数默认到底是阻塞的还是非阻塞的?
  • linux 如何用SOCKET设置函数设置阻塞和非阻塞?
  • linux C socke编程 创建的socket默认是阻塞的还是非阻塞的?
  • 请问:我发现在linux上的网络编程时, 若客户端连不上服务端,就会阻塞,但如果是在UNIX上,若连不上,会马上返回,并不阻 塞,怎样让它也能阻塞啊?
  • linux fwrite 阻塞问题
  • linux多线程无法进行阻塞方式的读写操作
  • linux下socket的send函数阻塞问题?
  • Linux里的pthread_create会不会阻塞啊?
  • linux socket fd 写阻塞问题
  • Linux系统刚启动起来的时候为什么会阻塞一下?
  • linux shell如何非阻塞写命名管道
  • linux sem_wait 为什么会阻塞进程?
  • linux下消息队列不阻塞
  • 如何linux 程序中启用其他进程,非阻塞,非popen
  • Linux线程阻塞问题 高手请进
  • linux多线程无法进行阻塞方式的读写操作?
  • linux下如何设置一个socket为非阻塞方式?
  • 在Linux下如何等待线程终止,又不会阻塞
  • linux下的非阻塞读取
  • linux epoll的ET模式和LT模式的主要区别是什么呢?为什么ET模式一定要用非阻塞socket?
  • Linux下自动执行命令的问题,哪位Linux高手帮帮我.
  • 有谁会Linux下的网络编程,请帮帮我,谢谢!
  • 急!大家帮帮忙!有哪些视频点播系统能在在LINUX下安装以及怎样安装!
  • 急!大家帮帮忙!有什么视频点播系统能在LINUX下安装,以及怎样安装!!
  • 为什么我升级LINUX的内核老是不成功呀!谁能帮帮我呀
  • Linux下连接Mysql出错,大家帮帮我吧
  • U盘的LINUX系统问题,大虾们帮帮忙。
  • 大家帮帮忙----linux下的编程到底要学哪些东西?
  • 才学Linux下的开发,请大家帮帮忙(谢谢了)
  • TURBO LINUX 中FTP的问题!请大峡吧帮帮小妹~~~~~
  • 高手们快来帮帮忙啊,,好郁闷!!!LINUX 9.0装不上的问题!
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 小弟想请教,如果现在不像装linux了怎样把linux的分区改回ntfs格式的?
  • 各位大虾,帮小弟一下,刚学linux,怎么在linux下安装硬件的驱动程序
  • 小弟求解LINUX下SHELL编程问题
  • 学习LINUX需要什么配置的机器,小弟正准备向LINUX进军,还请各位大侠指点一二!
  • 小弟想学linux,推荐几本好书,有电子版下载的最好.
  • 小弟初学LINUX,想问一下WINE的RPM包如何安装,以及WINE如何使用.谢谢
  • 哪位大哥有www server方面的源码(c++)在linux上面运行,小弟300分求!!
  • [求助]请问Linux下怎么打开exe文件啊,小弟想安装网卡驱动啊
  • 100分征集:小弟用VMware Workstation装上了linux不会上网请问如何解决?
  • 小弟第一次接触linux,求帮助,来围观啦!!!
  • 各位大狭!小弟初学Linux,请各位列举学Linux的网站,留下QQ,Email以向各位请教!!!多谢了!!!
  • 小弟想在linux下访问windows 和usb的文件系统
  • 小弟高分求“Linux 0.02版”的源代码!
  • 小弟是菜鸟,最近安装了redhat linux但不知道怎么上网。。。请大家帮助。
  • 小弟要接触Linux编程了,请大家给点建议
  • 请问如何在Linux下配置声卡?小弟在此多谢了。
  • 小弟刚刚准备接触LINUX,达人们进来啊谢谢了哦
  • 请问实时性最高的嵌入式Linux版本是什么啊!小弟钱不多,但是谢谢了!
  • 各位linux的高手,小弟有个简单问题.lunix找不到了?
  • 请大家给小弟推荐一个linux下好用的编辑器,谢谢了
  • linux c/c++ IP字符串转换成可比较大小的数字
  • 在win分区上安装linux和独立分区安装linux有什么区别?可以同时安装吗?(两个linux系统)
  • linux哪个版本好?linux操作系统版本详细介绍及选择方案推荐
  • 在虚拟机上安装的linux上,能像真的linux系统一样开发linux程序么?
  • secureCRT下Linux终端汉字乱码解决方法
  • 我重装window后,把linux的引导区覆盖了,进不了linux怎么办?急啊,望热心的人帮助 (现在有linux的盘)
  • Linux c字符串中不可打印字符转换成16进制
  • 安装vmware软件,不用再安装linux系统,就可以模拟linux系统了,然后可以在其上学习一下LINUX下的基本操作 了?
  • Linux常用命令介绍:更改所属用户群组或档案属性
  • 红旗Linux主机可以通过127.0.0.1访问,但如何是连网的Win2000机器通过Linux的IP去访问Linux
  • linux命令大全详细分类介绍及常用linux命令文档手册下载


  • 站内导航:


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

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

    浙ICP备11055608号-3