С Новым годом! Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 03.01.2014
Сообщений: 4
1

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

18.02.2015, 16:43. Показов 634. Ответов 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
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Блог
18.02.2015, 16:43
Ответы с готовыми решениями:

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

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

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

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

3
Модератор
Эксперт С++
13722 / 10919 / 6478
Регистрация: 18.12.2011
Сообщений: 29,148
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
cpp_developer
Эксперт
20123 / 5690 / 417
Регистрация: 09.04.2010
Сообщений: 12,546
Блог
18.02.2015, 21:04
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru