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

select: Interrupted system call

20.09.2011, 10:52. Показов 3540. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Privet vsem!!!!!
EEst server napisan na C nujno dabavit programu log, Problema v tom cto Log kajdi chas doljen kapirovat (nu ili pereimenovovat ) Log.txt fayl!!!Problemu xotel reshit cherez signal(); metdom setitamer!!!!!
Copy.c:

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
unsigned int Timer ()
{
int seconds=1;
struct itimerval old, new;
new.it_interval.tv_usec = 0;
new.it_interval.tv_sec = 0;
new.it_value.tv_usec = 0;
new.it_value.tv_sec = (long int) seconds;
 
if (setitimer (ITIMER_REAL, &new, &old) < 0)
return 0;
else
return old.it_value.tv_sec;
 
}
/////////////////Copy function
void LogTraceCopy()
{
FILE *fileLogCopy, *fileTraceCopy;
char Def[500];
char Mailto[500];
int Trace, result;
char TraceD[500];
char TraceDRe[500];
Correct(Def, &Level2, Mailto);
TraceDef(TraceD, &Trace);
char reltime[100];
time_t rawtime;
struct tm * timeinfo;
time ( &rawtime );
timeinfo = localtime ( &rawtime );
strcpy(reltime,TraceD);
strcat(reltime, "-");
strcat(reltime, asctime(timeinfo));
strcat(reltime, ".log");
/////////////////////////////////
strcpy(TraceDRe, TraceD);
strcat(TraceDRe, "-");
strcat(TraceDRe, asctime(timeinfo));
strcat(TraceDRe, ".trace");
strcat(TraceD, ".trace");
if(Trace==1)
{
rename(Def, reltime);
rename(TraceD, TraceDRe);
fileLogCopy=fopen(Def, "a");
result=pclose(fileLogCopy);
fileTraceCopy=fopen(TraceD, "a");
result=pclose(fileTraceCopy);
printf("Trace: %s", TraceD);
 
}
else if(rename(Def, reltime)==0 )
{
fileLogCopy=fopen(Def, "a");
result=pclose(fileLogCopy);
 
}
memset(TraceD,'\0',500);
memset(Def,'\0',500);
memset(Mailto,'\0',500);
memset(TraceDRe,'\0',500);
Timer();
}
Main.c:
int main()
............///
 
Timer();
signal(SIGALRM, LogTraceCopy);
...../////////
Doljen bil pereimenovat fayl kajduyu sekundu!!!Odin raz pereimenovovayet i
No ne rabotaet pishet

select: Interrupted system call

Kto znaet v chom delo, kak nujno ispravit, nu ili gde kopat!zaranee blagodaren
P.S
Ya nachinayushi programist tak cto silno zlitsya na cod ne nado esli cho!!!!!!!!!!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.09.2011, 10:52
Ответы с готовыми решениями:

C/C++ Interrupted system call
Privet vsem!!!!! EEst server napisan na C nujno dabavit programu log, Problema v tom cto Log kajdi chas doljen kapirovat (nu ili...

Legacy system call / Fast system calls
Доброе время суток. Пытаюсь разобраться как работают системные вызовы. Вижу что существует два способа системных вызовов. ...

Error: code interrupted
Подскажите пожалуйста, в чем может быть проблема, когда выскакивает такое сообщение. Дело в том, что я запускаю макрос на другой версии...

15
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
20.09.2011, 11:11
Два совета:
Настоятельно рекомендую использовать теги форматирования кода!
Так же рекомендую не маяться дурью и использовать системные средства для ротации логов.

По сути вопроса:
срабатывает 1 раз: man signal - после срабатывания сбрасывается в SIG_DFL, используйте sigaction()
select: Interrupted system call: Это ваш сигнал прилетел, проверяйте errno на EINTR.
По коду: лучше просто в обработчике сигнала ставить флаг, а всю логику вынести в отдельную ф-цию. Пример
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void handler(int signo){
  got_alarm = 1;
}
 
while (1) {
  ...
  if (got_alarm) {
    handle_alarm();
    got_alarm = 0;
  }
  n = select(...);
  if (n < 1) {
    if (n == -1) {
      if (errno == EINTR) continue;
      handle_fatal();
    }
    handle_timeout();
  }
  ...
}
1
0 / 0 / 0
Регистрация: 20.09.2011
Сообщений: 52
20.09.2011, 11:31  [ТС]
Spasibo za saveti g_u_e_s_t
Budu menyat!!!
A bolle konkretnogo primera mojete predostavit s sigaction()
0
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
20.09.2011, 11:50
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
#include <err.h>
#include <signal.h>
#include <string.h>
#include <unistd.h>
 
void
handler(int sig)
{
        (void)sig;
        (void)write(0, "alarm\n", 6);
}
 
int
main()
{
        struct sigaction act;
        struct itimerval itv;
 
        memset(&act, '\0', sizeof(act));
        act.sa_handler = handler;
        if (sigaction(SIGALRM, &act, NULL) == -1)
                err(1, "sigaction");
 
        memset(&itv, '\0', sizeof(itv));
        itv.it_interval.tv_sec = 1;
        itv.it_value.tv_sec = 1;
        if (setitimer(ITIMER_REAL, &itv, NULL) == -1)
                err(1, "setitimer");
 
        while (1)
                sleep(5);
}
1
0 / 0 / 0
Регистрация: 20.09.2011
Сообщений: 52
20.09.2011, 14:52  [ТС]
Esho ras sposibo srabotola!!!!!!!teper problema v drugom!!!!
Voznikayushi cikl while(1) meahet ciklu connect() server !to es iz za nego do etogo i ne doxodit!!!!!!!!
Kak zapustit setitamer paralelono

Добавлено через 35 минут
Naskolko ya ponimayu mne nuyno ctobi rabotala bez while() no pri eom funkciya pereimenovavayuhaya fayl daljna zapuskatsya kajdi chas!!kak etogo dobitsya?

Добавлено через 33 минуты
Ubirayu while(1) ta je samaya problema select: Interrupted system call
!!!!!!!!
Cho on ot meya xochet?
0
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
20.09.2011, 14:53
Вас сложно понимать из-за транслита...

в первом примере while (1) {} это цикл вокруг select() Вроде типичный код для select-based серверов.
При таком подходе достаточно проверять "а был-ли сигнал" в одном месте (в примере это делается перед select()). Если вас это не устраивает (например обработка результатов select() долгая, то вы можете определить несколько таких точек проверки, или например маскировать сигнал что-бы он доставлялся только в процессе выполнения определенных участков кода.

Если я вас не правильно понимаю, то покажите схематично схему организации сервера.
1
0 / 0 / 0
Регистрация: 20.09.2011
Сообщений: 52
20.09.2011, 15:16  [ТС]
хорошо!!!!!!!
Объясню сначало!!!!!! Есть сервер написан на C !!мне нужно было написать для него Лог; Log должен создать Log.txt file записать в него логи и создавать копию файла каждый час!!!!!!!
Единственное что мне не удается это проблема копирования, Как мне создать timer который не будет работат сам по себе не мешая работе сервера!!!????
Может быть я не тем путем пошел!!!!!!!!

Добавлено через 58 секунд
СОРРИ опечатка
хорошо!!!!!!!
Объясню сначало!!!!!! Есть сервер написан на C !!мне нужно было написать для него Лог; Log должен создать Log.txt file записать в него логи и создавать копию файла каждый час!!!!!!!
Единственное что мне не удается это проблема копирования, Как мне создать timer который будет работат сам по себе не мешая работе сервера!!!????
Может быть я не тем путем пошел!!!!!!!!
0
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
20.09.2011, 15:29
На 2й круг пошли...
Цитата Сообщение от fanatjan Посмотреть сообщение
Может быть я не тем путем пошел!!!!!!!!
Да. Программа должна делать оду вещь и делать ее хорошо. Правильный путь - смотрите например на апачевский rotatelogs.
Цитата Сообщение от fanatjan Посмотреть сообщение
Как мне создать timer который будет работат сам по себе не мешая работе сервера!!!????
Пишите сервер так, что бы доставка сигнала ему не мешала: всегда и везде проверяйте EINTR или маскируйте сигнал на участках кода, где вы не готовы к его приходу, ну или вынесите таймер и запись лога в отдельную нить.
1
0 / 0 / 0
Регистрация: 20.09.2011
Сообщений: 52
20.09.2011, 15:53  [ТС]
Понимаю что замучил;
"ну или вынесите таймер и запись лога в отдельную нить."
Ну так я это и хочу узнать вынесите таймер и запись лога в отдельную нить? Thredami?

Добавлено через 1 минуту
Понимаю что замучил;
"ну или вынесите таймер и запись лога в отдельную нить."
Ну так я это и хочу узнать Как вынесите таймер и запись лога в отдельную нить? Thredami?

Добавлено через 40 секунд
Можете пример показать?
0
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
20.09.2011, 15:58
Цитата Сообщение от fanatjan Посмотреть сообщение
hredami?
Добавлено через 40 секунд
Можете пример показать?
Да. Могу, но уже не хочу)
0
0 / 0 / 0
Регистрация: 20.09.2011
Сообщений: 52
20.09.2011, 16:41  [ТС]
Да уж спасибо помощь

Добавлено через 40 минут
Спасибо за помощь!!!
А что не хочешь?Жалко помочь?
0
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
20.09.2011, 16:59
Цитата Сообщение от fanatjan Посмотреть сообщение
А что не хочешь?Жалко помочь?
Не, просто уверен, что "не в коня корм", извините.
0
0 / 0 / 0
Регистрация: 20.09.2011
Сообщений: 52
20.09.2011, 17:25  [ТС]
И на том Спасибо!!!!!!!

Добавлено через 3 минуты
А литературу на эту тему подсказать можешь ?

Добавлено через 4 минуты
Насколько Я понимаю из за этого сигнала функция в сервере Select()==-1; и из за этого происходит zboy, но как от этого избавиться недопонял к сожалению
0
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
20.09.2011, 17:37
Цитата Сообщение от fanatjan Посмотреть сообщение
Насколько Я понимаю из за этого сигнала функция в сервере Select()==-1; и из за этого происходит zboy, но как от этого избавиться недопонял к сожалению
Я же два раза написал и один раз показал...
Давайте третий раз повторю - проверяйте errno на EINTR

Если литература было к варианту вынести обработку сигнала в отдельную нить, то man sigfillset pthread_sigmask pthread_create и sigwait вполне хватит.
1
0 / 0 / 0
Регистрация: 20.09.2011
Сообщений: 52
21.09.2011, 02:27  [ТС]
g_u_e_s_t Спасибо
днем что-то башка не варила
proveril na провер errno на EINTR все нормально сработала!!!
0
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
21.09.2011, 10:41
Поздравляю.
Надеюсь вы ее не только к select() прикрутили, но и к всем ф-ция в man которых упомянут EINTR
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.09.2011, 10:41
Помогаю со студенческими работами здесь

Ошибка в программе: Code execution has been interrupted
чего-то пользователь сделал при работе с программой - выдается ошибка Code execution has been interrupted при выборе continue -...

Как побороть Code execution has been interrupted
Почитал другие форумы и не нашел ответа. Вот выдержка: &quot; При выполнении вполне работоспособного кода выскакивает сообщение &quot;Code...

cannot call methods on dialog prior to initialization; attempted to call method 'close'
Добрый день! Я пытаюсь перенести вот этот пример в ASP MVC4 проект: http://jsfiddle.net/rniemeyer/WpnTU/ Поставил те же библиотеки...

Важно!При нажатии на кнопке выдает: using System; using System.Collections.Generic; using System
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using...

Что за классы System, System.Drawing, System.Windows.Forms
Народ, объясните пожалуйста что за классы: System, System.Drawing, System.Windows.Forms. В справке как-то ничего не нашел. Если там есть,...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru