scanf в цикле

Автор the grib, 30 марта 2015, 00:18:00

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

the grib

заметил, что код, содержащий в цикле scanf, запущенный дабл-кликом из X11 (XFCE), начинает с огромной скоростью есть жёсткий диск. Весь вывод до scanf
идёт в файл .xsession-errors. Вот пример такого кода:

#include <stdlib.h>
#include <stdio.h>

int main(void)
{
char s[33];
while (1)
{
printf("============ this fills ~/.xsession-errors file\n");
scanf("%s",s);
}
return 0;
}


Оказалось, что в случае запуска дабл-кликом scanf не блокирует процесс. Это можно считать багом системы? Всё-таки достаточно мрачная фича. Если это баг, кто-нибудь может рассказать, как об этом правильно сообщить разработчикам xfce или XOrg?

ogost

scanf считывает ввод со стандартного ввода, то бишь ожидает, что вы его запускаете в терминале и посылаете ему сигналы (как-то так). а вы его запускаете дабл-кликов в гуи. что же вы ожидали?
P.S.: используйте теги.

the grib

#2
ожидал, что программа остановится на scanf и будет вечно ждать. Похоже я понял, в чём дело, scanf завершается неудачей без ожидания ввода т.к. ей не дали stdin.
для подстраховки нужно писать так:
#include <stdlib.h>
#include <stdio.h>

int main(void)
{
char s[33];
while (1)
{
printf("============ this fills ~/.xsession-errors file\n");
if ( scanf("%s",s) < 1 ) return 1;
}
return 0;
}