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

ppoll сбрасывает стек на диск

23.05.2023, 15:48. Показов 964. Ответов 1

Студворк — интернет-сервис помощи студентам
Здравствуйте всем, в университете задали написать программу которая при помощи именованых семафороф записывает в файл цифры, а для выхода использует ppoll(). Почитав по нему документацию я столкнулся с проблемой: когда создаю структуру pollfd программа крашится и выдает ошибку "стек памяти сброшен на диск". В чём проблема?

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
#include <iostream>
#define _GNU_SOURSE
#include <unistd.h>
#include <string.h>
#include <semaphore.h>
#include <errno.h>
#include <time.h>
#include <fstream>
#include <poll.h>
 
using namespace std;
 
sem_t* sem;
 
int main()
{
    cout << endl << "Программа начала работу" << endl;
    struct pollfd pfd;
    
 
    pfd.fd = 0;
    pfd.events = POLLIN;
    
    
    ofstream file("file.txt");
    sem = sem_open("semaphore_1", 0);
    bool flag = true;
    while(flag){
 
        sem_wait(sem);
        for (int i = 0; i <= 5; i++)
            {
            cout << "2\n";
                    
            file << "2\n";
                    
                }
        sem_post(sem);
        sleep(1);
        struct timespec ts;
        if (clock_gettime(CLOCK_REALTIME, &ts) == -1)
            {
                    cout << "Clock gettime ошибка";
                    exit(EXIT_FAILURE);
            }
            ts.tv_sec += 1;
        int rv = ppoll(&pfd, 1, &ts, NULL);
        cout << rv << endl;
    }
 
 
}
p.s. rv просто вывожу, хочется узнать что будет возвращать при нажатии на разные кнопки
ну и на всякий случай прилагаю sh которым компилирую и запускаю
Code
1
2
3
4
#!/bin/bash
g++ -c record_1.cpp
g++ -o record_1 record_1.o -lpthread
./record_1
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.05.2023, 15:48
Ответы с готовыми решениями:

Ошибка сегментирования (стек памяти сброшен на диск)
Есть следующий код (с ncurses): #include&lt;ncurses.h&gt; #include&lt;string.h&gt; unsigned short maxx; unsigned short maxy; char *window; ...

Ошибка сегментирования (стек памяти сброшен на диск)
Здравствуйте. Я новичок в Ассемблере, и мне надо решить следующую задачу: есть массив из 12 положительных чисел. Нужно посчитать количество...

Ошибка сегментирования (стек памяти сброшен на диск)
Всем привет. Искал решение на форумах, но увы, ничего. При запуске генератора файлов, после указания параметров Max rows(50000):...

1
Почетный модератор
 Аватар для Humanoid
11560 / 4354 / 453
Регистрация: 12.06.2008
Сообщений: 12,455
23.05.2023, 23:28
Вы проверяли, что возвращает sem_open() ? Возможно, функция не смогла создать семафор и вернула SEM_FAILED. Судя по описанию, что бы создать новый семафор надо последним аргументом указать O_CREAT. Предлагаю добавить проверку:
C
1
2
3
if (sem == SEM_FAILED) {
  // вывод ошибки и завершение работы
}
Указатель на ts, который передаётся в ppoll() - это таймаут ожидания. Нет никакого смысла его инициализировать текущей датой. Если хотите, что бы ожидание было непрерывным, то просто передаёте NULL вместо указателя.
C
1
int rv = ppoll(&pfd, 1, NULL, NULL);
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.05.2023, 23:28
Помогаю со студенческими работами здесь

Ошибка сегментирования (стек памяти сброшен на диск)
Здравствуйте. Прошу помощи. При компиляции ошибок нет, двумерный массив появляется, но при выполнении блока с подсчетом локальных минимумов...

Аварийный останов (стек памяти сброшен на диск)
Этот участок кода вызывает ошибку. Как исправить? *** stack smashing detected ***: &lt;unknown&gt; terminated Аварийный останов (стек...

Ошибка сегментирования (стек памяти сброшен на диск)
section .text global -start _start: mov al, 25 mov bl, 37 div bl mov bx, 3 mul bx

Ошибка сегментирования (стек памяти сброшен на диск)
Доброго времени суток, коллеги. Использую SOAP Client https://github.com/phpro/soap-client И при добавлении определенного параметра с...

Ошибка сегментирования (стек памяти сброшен на диск)
Помогите найти ошибку в коде. Ошибка сегментирования выскакивает после ввода трех строк. section .data hello_msg db &quot;Welcome to...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru