如何中断c中的Scanf(),退出scanf

时间:2014-08-25 13:20:56

标签: c scanf

我想找到一种方法退出scanf()而不中断程序运行,我的意思是我希望即使输入任何数据,该程序仍然在运行。我正在使用Linux

这是C代码:

char chaine1[256];
char chaine2[] = "exit";
int i;

do {                    
    //The loop allows to control if the data is coming 
    //and send it continuously trough ethernet.
    printf("preparing to send informations, exit to stop !\n");
    scanf("%s", &chaine1);
    i = strcmp(chaine1, chaine2); // Building the condition to exit
    printf ("i= %d\n",&i); 
   } while (i!=0);

提前感谢您的帮助!

PS:我是c的初学者,我不知道多路复用系统调用和双线程,所以如果你能在答案中给我一个混凝土解决方案我会感激不尽

没有人看到有答案! 我很绝望,请帮助我!

1 个答案:

答案 0 :(得分:1)

有两种方法可行:

  1. 在主要作品的单独帖子中使用scanf。它仍会阻止,但只有那个线程。如果用户键入"退出",您的scanf线程将向您的工作线程发送一些消息,告诉它关闭

  2. 使用同步I / O多路复用在单个线程中交错主要和用户I / O操作(这只有在主要操作确实以I / O为主时才能正常工作)。 select / poll /等。一系列调用允许您同时监视与套接字关联的STDIN_FILENO和文件描述符。您必须手动处理来自STDIN_FILENO的阅读,但是当它可读时,而不是使用scanf / fscanf(并且应该使用非阻塞读取)。

  3. 第二种选择听起来更复杂,但如果您正在进行以I / O为主导的工作,那么您通常已经拥有该框架。

    请注意,这些都不会涉及中断scanf,尽管可能是{em>可怕的选项。


    NB。我看到你要求具体的代码 - 但这两种方法都涉及大量的设置。您需要做一些研究,然后回答一个不仅仅是问题的问题,请为我编写所有代码"。

    我仍然没有足够的背景知道这两个选项中哪一个更适合你,如果你被简化为描述你的整个程序并让一个陌生人重写它对你而言,我不知道该建议什么。也许雇人?