LinuxForum.Fans
Тема

Убунта, терминал, Си, таймер

Автор: NewBee 7 сообщений 2547 просмотров
#215297

Написать программу, которая по сигналу SIGUSR2 очищает экран терминала и начинает заполнять его произвольным символом. По сигналу от таймера заполнение через 15 сек. прекращается, экран чистится заново и выводится информация «люблю чистоту!». По сигналу таймера эта надпись начинает мигать через каждые 2 сек.
Программа завершается по сигналу TERM {комбинация клавиш CTRL+C).

Ну примерно я знаю как это все замутить. не понятно только как заставить прогу заполнять экран произвольными символам в течение 15 сек, чтобы пользователь это видел. у меня тупо или просто выводит на экран строчки, которые я сама в цикле забила или тупо пишет "люблю чистоту". помогите чем можете))

#215308
NewBee написал:
не понятно только как заставить прогу заполнять экран произвольными символам в течение 15 сек

на самом деле это, пожалуй, самая простая часть - генерируете с помощью rand() случайные числа и заполняете ими строку.

#215310
Fat-Zer написал:
[quote=NewBee]не понятно только как заставить прогу заполнять экран произвольными символам в течение 15 сек

на самом деле это, пожалуй, самая простая часть - генерируете с помощью rand() случайные числа и заполняете ими строку.[/quote]

в общем с этим не суть важно, главное чтобы как-то удержать эту "генерацию" в течении 15 сек и потом благополучно убрать и оставить чистый экран. alarm() че-то как-то не катит (хотя возможно я что-то не то делала, я новичок в этом деле)

#215315

два варианта:

text

time_t t_ch=time(0)+15;
do {
    // действия
} while(time(0) < t_ch);

если нужна высокая точность, то можно использовать clock_gettime();

второй - alarm(). ИРЛ так скорей всего делать не будут, но "По сигналу от таймера" наводит на мысль, что именно его вас просят использовать.

#215317
Fat-Zer написал:
time_t t_ch=time(0)+15; do { // действия } while(time(0) < t_ch);

это помогло!! спасибо)))
а вот как заставить надпись мигать?

#215346
NewBee написал:
а вот как заставить надпись мигать?

средствами чистого си - ни как. ЕМНИП даже средствами posix - ни как [fixme].
ручками: напечатать-стереть-напечатать-стереть-...
конкретная реализация зависит от того, через сто работаете с консолью...

#215412
Fat-Zer написал:
[quote=NewBee]а вот как заставить надпись мигать?

средствами чистого си - ни как. ЕМНИП даже средствами posix - ни как [fixme].
ручками: напечатать-стереть-напечатать-стереть-...
конкретная реализация зависит от того, через сто работаете с консолью...[/quote]
С помощью ESC последовательности. Не?

Войдите или зарегистрируйтесь, чтобы ответить.