Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 21.04.2022
Сообщений: 2

Программа «будильник»

21.04.2022, 13:24. Показов 1755. Ответов 2

Студворк — интернет-сервис помощи студентам
Можете помочь!
6. Программа «будильник». Позволяет запустить программу с заданным значением времени (передается как значение ключа
«-t», по умолчанию составляет 5 минут), при наступлении которого программа выполнить должна одно из действий, заданных аргументами:
o ключ «-c» со значением cmd — запустить команду cmd;
o ключ «-p» со значением file — проиграть звуковой файл file;
o ключ «-k» со значением pid — отправить сигнал USR1 процессу с идентификатором pid.
Сама программа при получении сигнала должна выдать текущее время с момента запуска. Пример запуска двух процессов программы, один их которых проиграет звуковой файл спустя минуту после запуска, а второй через 5 секунд после запуска отправляет сигнал USR1 первому процессу:
$ ./alarm -t 00:01:00 -p "alarm.mp3" & [21305]
$ ./alarm -t 00:00:05 -k 21305
Время с момента запуска: 00:00:33

Если кто делал, можете поделиться пж.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.04.2022, 13:24
Ответы с готовыми решениями:

Консольный будильник: как сверять время и проиграть мелодию
Добрый вечер. Задали мне тут задачку, не знаю как реализовать. Задача: Написать консольную программу, которая будет содержать в себе...

Программа будильник
Ув. программисты пишу программу и столкнулся с проблемой.программа будильник.мне нужно сделать повтор.для повтора использую switch.Почему...

Нужна программа Музыкальный будильник!
нужна программа Музыкальный будильник!!! Очень срочно

2
147 / 135 / 50
Регистрация: 14.05.2021
Сообщений: 642
22.04.2022, 15:22
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
 
struct Action {
    void (*actionFunc)(const char* param);
    const char* actionArg;
} usrAction;
 
void runCmd(const char* cmd) {
    system(cmd);
}
 
void sendSignal(const char* pid) {
    kill((__pid_t)pid, SIGUSR1);
    exit(0);
}
 
void alarmHanlder(int sig) {
    if(usrAction.actionFunc && usrAction.actionArg)
        usrAction.actionFunc(usrAction.actionArg);
    free((void*)usrAction.actionArg);
    exit(0);
}
 
void usr1Hanlder(int sig)
{
    int leftSeconds = alarm(0);
    printf("Time from start: %02d:%02d:%02d\n", leftSeconds/360, leftSeconds/60%60, leftSeconds%60);
    fflush(stdout);
    alarm(leftSeconds);
}
 
int main(int argc, char** argv) {
    int h, m, s;
    const char *timeToWait = NULL;
    usrAction.actionArg = NULL;
    usrAction.actionFunc = NULL;
 
    for(char** opt = argv+1; *opt; ++opt) {
        if (strcmp("-c", *opt) == 0) { // cmd
            if (++opt) {
                usrAction.actionFunc = runCmd;
                usrAction.actionArg = strdup(*opt);
            }
            if (timeToWait)
                break;
        }
        else if (strcmp("-p", *opt) == 0) { // mp3
            if (++opt) {
                size_t cmdLen = strlen(*opt) + 16;
                char* cmd = malloc(cmdLen);
                snprintf(cmd, cmdLen, "mpg123 %s", *opt);
                usrAction.actionFunc = runCmd;
                usrAction.actionArg = cmd;
            }
            if (timeToWait)
                break;
        }
        else if (strcmp("-k", *opt) == 0) { // signal
            if (++opt) {
                int pid = atoi(*opt);
                usrAction.actionFunc = sendSignal;
                usrAction.actionArg = (const char*)pid;
            }
            if (timeToWait)
                break;
        }
        else if (strcmp("-t", *opt) == 0) { // timer
            if (++opt)
                timeToWait = *opt;
 
            if (usrAction.actionFunc)
                break;
        }
    }
 
    if (usrAction.actionFunc == NULL) {
        puts("Not user action provided.");
        return -1;
    }
 
    if (timeToWait == NULL) {
        puts("No wait time parameter.");
        if (usrAction.actionArg) free((void*)usrAction.actionArg);
        return -1;
    }
 
    if (timeToWait) {
        if (sscanf(timeToWait, "%2d:%2d:%2d", &h, &m,&s) == 3) {
            struct sigaction act;
            sigemptyset(&act.sa_mask);
            act.sa_flags = 0;
            act.sa_handler = alarmHanlder;
            sigaction(SIGALRM, &act, NULL);
            const int secondsToWait = s + m*60 + h*360;
            printf("Waiting for %d seconds.\n", secondsToWait);
            alarm(secondsToWait);
 
            sigemptyset(&act.sa_mask);
            act.sa_flags = 0;
            act.sa_handler = usr1Hanlder;
            sigaction(SIGUSR1, &act, NULL);
        }
        else {
            puts("Wrong time format.");
            return -1;
        }
    }
 
    while(1) sleep(5);
 
    return 0;
}
Все детальные проверки и нормальное проигрывание через библиотеку, а не через вызов консольной команды, доделаешь сам. Точность alarm - одна секунда. Поэтому, если нужно без косяка с alarm(alarm(0)), то переделаешь на set/get timer тоже сам.
0
0 / 0 / 0
Регистрация: 21.04.2022
Сообщений: 2
26.04.2022, 23:21  [ТС]
Гений! LinuxMaster!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.04.2022, 23:21
Помогаю со студенческими работами здесь

Программа часы-будильник-календарь
Пожалуйста помогите найти программу часы-будильник-календарь на языке Си не с++ ,а именно си где-то месяц ищу не могу найти и сделать не...

Не могу найти ошибку, программа Будильник
Сделал программу будильник, все работало, оставалось только сделать выбор музыки для проигрывания и доделать окно сигнала с сообщением, но...

С чего начать, первая программа на компьютере "Будильник"
Всем привет! Учусь на 3м курсе, для курсовой работы нужно сделать программу &quot;Будильник&quot; и вот в чем вопрос: Какую среду разработки...

Будильник
Начал делать примитивный будильник и столкнулся с проблемой. Когда комп отправляешь в сон, то будильник не срабатывает. Как сделать чтобы...

Будильник
Кто может кинуть будильник на С++ Зарание благодарный!!!!!


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru