我想找到一种方法退出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的初学者,我不知道多路复用系统调用和双线程,所以如果你能在答案中给我一个混凝土解决方案我会感激不尽
没有人看到有答案! 我很绝望,请帮助我!
答案 0 :(得分:1)
有两种方法可行:
在主要作品的单独帖子中使用scanf
。它仍会阻止,但只有那个线程。如果用户键入"退出",您的scanf线程将向您的工作线程发送一些消息,告诉它关闭
使用同步I / O多路复用在单个线程中交错主要和用户I / O操作(这只有在主要操作确实以I / O为主时才能正常工作)。 select
/ poll
/等。一系列调用允许您同时监视与套接字关联的STDIN_FILENO
和文件描述符。您必须手动处理来自STDIN_FILENO
的阅读,但是当它可读时,而不是使用scanf
/ fscanf
(并且应该使用非阻塞读取)。
第二种选择听起来更复杂,但如果您正在进行以I / O为主导的工作,那么您通常已经拥有该框架。
请注意,这些都不会涉及中断scanf
,尽管可能是{em>可怕的选项。
NB。我看到你要求具体的代码 - 但这两种方法都涉及大量的设置。您需要做一些研究,然后回答一个不仅仅是问题的问题,请为我编写所有代码"。
我仍然没有足够的背景知道这两个选项中哪一个更适合你,如果你被简化为描述你的整个程序并让一个陌生人重写它对你而言,我不知道该建议什么。也许雇人?