0 / 0 / 0
Регистрация: 03.01.2014
Сообщений: 4
1

Как при срабатывании SIGINT правильно передать значение переменной i в функцию closing

18.02.2015, 16:43. Показов 638. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Имеется код:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
 
 
void closing(int number) {
   printf ("%d\n", number);
  exit(1);
}
 
int main(void) {
   int i;
   signal(SIGINT, closing);
  
  i = 0;
  while(1) { i++; }
  
}
Подскажите, как при срабатывании SIGINT правильно передать значение переменной i в функцию closing?
Пробовал что-то типа signal(SIGINT, closing(i)), но компилятор ругается.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.02.2015, 16:43
Ответы с готовыми решениями:

Как значение переменной в VbScript передать в функцию JavaScript?
Существует переменая в VBscript (Dim). Её значение требуется передать в функцию Javascript ... Как...

Как передать значение переменной из функции инт в функцию воид?
Как передать значения а и b из int start(void) в void inputfile(void), чтоб строка 34 и т.д....

Как передать значение переменной из одной функции в другую функцию
нужно передать значение sum1 , sum2 , sum3 из каждой функции в главную . помогите , пожалуйста . ...

Как правильно передать объект в функцию при использовании многопоточности
Добрый день, форум! Возникла вот такая задача: Есть два класса: класс А, реализующий...

3
Модератор
Эксперт С++
13727 / 10923 / 6479
Регистрация: 18.12.2011
Сообщений: 29,156
18.02.2015, 18:07 2
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
void closing(int number) 
{
   printf ("%d\n", number);
   return;
}
 void signal(  void (*f)(int),int i )
{
    f(i);
}
int main(void) 
{
  int i;
  for(i=1;i<=100;i++) 
  { 
     signal(closing,i);
  }
}
0
...
1910 / 1329 / 966
Регистрация: 12.02.2013
Сообщений: 2,172
18.02.2015, 18:31 3
zss, вы немного не о том.

tamd, да, в качестве аргумента функция должна принимать параметр, но этот параметр передаёт сам сигнал. А чтобы воспользоваться переменной, то придёться делать её глобальной. К примеру так:
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
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
 
static int i = 0;
 
void closing(int sig) {
    if (sig == SIGINT) {
        printf("%d\n", i);
    }
    else {
        printf("other signal\n");
    }
    exit(1);
}
 
int main(void) {
    signal(SIGINT, closing);
 
    while (1) {
        i++;
    }
 
    return 0;
}
0
0 / 0 / 0
Регистрация: 03.01.2014
Сообщений: 4
18.02.2015, 21:04  [ТС] 4
anmartex, а без глобальной переменной i никак не обойтись? В принципе, можно попробовать вместо сигналов повесить передачу переменной i в функцию после нажатия на какую-нибудь клавишу (в linux). Вот тут нашелся пример https://www.cyberforum.ru/post5872740.html, но как его связать с моим?
Что-то типа
C
1
2
3
if ((ch = getc(stdin)) == 'q') {
        closing(i);
    }
не прокатывает, т.к. цикл с i не идет.
0
18.02.2015, 21:04
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.02.2015, 21:04
Помогаю со студенческими работами здесь

Как правильно вывести пользователю сообщение об ошибке при срабатывании исключения в БД
Имеется БД в SQL Server 2008 R2 и клиентское приложение на WPF, которое работает с этой БД при...

Увеличение переменной на 1, но лишь при срабатывании булевой переменной
Приветствую. Полагаю, для многих это несложный вопрос. Нужно сотворить код, который при true...

Передать значение переменной в другую функцию
Переменная name хранит выбранное юзером в комбобоксе значение. Хочу его передать в другую функцию,...

Правильно передать значение указателя в функцию
Всем привет. Есть функция, которая имеет параметром ссылку, а есть указатель, который надо...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

Новые блоги и статьи
Как получить индекс в цикле for в Python
bytestream 21.01.2025
При работе с коллекциями данных в Python часто возникает необходимость не только получить доступ к элементам последовательности, но и знать их позицию в процессе итерации. Индексация в циклах. . .
Как определить адрес, из которого локальный репозиторий Git был клонирован
bytestream 21.01.2025
В современной разработке программного обеспечения система контроля версий Git стала неотъемлемой частью рабочего процесса. При работе с Git разработчики часто сталкиваются с необходимостью. . .
Какая разница между операторами == и === в сравнениях в JavaScript
bytestream 21.01.2025
В мире веб-разработки JavaScript занимает особое место как динамический язык программирования, предоставляющий разработчикам широкий набор инструментов для создания интерактивных веб-приложений. . . .
Из чего и как собрать свой домашний кинотеатр
bt_guru 21.01.2025
Создание домашнего кинотеатра: от идеи до реализации В современном мире домашний кинотеатр стал неотъемлемой частью комфортного жилого пространства, предоставляя возможность наслаждаться. . .
Ошибки стиральных машин
bt_guru 21.01.2025
Современные стиральные машины представляют собой сложные электронные устройства, оснащенные множеством датчиков и систем контроля. Они способны самостоятельно определять вес загруженного белья,. . .
Копирование (маппинг) объектов в JavaScript
bytestream 21.01.2025
В современной разработке программного обеспечения копирование объектов представляет собой фундаментальную операцию, которая требует особого внимания и понимания. Маппинг объектов в JavaScript – это. . .
Как работать с Apache Kafka в C# .NET
bytestream 21.01.2025
Apache Kafka представляет собой распределенную платформу потоковой передачи данных, которая произвела революцию в области обработки больших объемов информации в реальном времени. Эта система,. . .
Как использовать RabbitMQ в C# .NET
bytestream 21.01.2025
RabbitMQ представляет собой мощный брокер сообщений, который эффективно решает эту задачу, обеспечивая надежную передачу данных между множеством приложений. Этот инструмент реализует протокол AMQP. . .
Как объединить последние коммиты в Git
bytestream 21.01.2025
В мире разработки программного обеспечения система контроля версий Git стала незаменимым инструментом для управления исходным кодом. Одной из наиболее полезных, но порой сложных для освоения функций. . .
Как запушить новую локальную ветку (branch) в удалённый репозиторий Git и отслеживать её
bytestream 21.01.2025
В современной разработке программного обеспечения система контроля версий Git стала неотъемлемым инструментом для эффективного управления кодом и организации командной работы. Одной из ключевых. . .
Как создать директорию и все родительские директории, указанные в пути, с помощью Python
bytestream 21.01.2025
Python предоставляет мощные инструменты для работы с файловой системой через встроенные модули os и pathlib, которые значительно упрощают процесс манипуляции директориями. Эти модули содержат. . .
Как работать с массивами в JavaScript
bytestream 21.01.2025
Массивы в JavaScript представляют собой один из фундаментальных типов данных, который позволяет хранить упорядоченные коллекции различных элементов в одной переменной. Эта структура данных является. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru