QNX.ORG.RU

Разработка => Программирование под QNX => Тема начата: ia от Июля 10, 2017, 09:14:16 am



Название: функция shutdown_system()
Отправлено: ia от Июля 10, 2017, 09:14:16 am
Проект на С++ для QNX6.5,
компилятор i486-pc-nto-qnx6.5.0-gcc-4.4.2

Хочу завершить работу системы путем вызова shutdown_system().
Компилятор выдает ошибку,
потому что в <sys/shutdown.h> находится описание структуры

typedef struct
{
    uint64_t start_time;
    pid_t pid;
    int8_t class;
    uint8_t padding[3];
    char *name;
} ProcessInfo_t;

Обратите внимание на поле int8_t class.

Можно ли побороть?


Название: Re: функция shutdown_system()
Отправлено: Dark от Июля 10, 2017, 10:25:32 am
Можно ли побороть?

Естественно. Используйте Си.


Название: Re: функция shutdown_system()
Отправлено: ia от Июля 10, 2017, 11:02:58 am
Да я обычно на Си и работаю.
К сожалению, не в этом проекте.

Можно переименовать поле, например, в class1.
Но не хочется править системные h-файлы.

Меня смущает, что разработчики так неаккуратно выбрали идентификатор.


Название: Re: функция shutdown_system()
Отправлено: darkelf от Июля 10, 2017, 12:42:52 pm
Да я обычно на Си и работаю.
К сожалению, не в этом проекте.

Можно переименовать поле, например, в class1.
Но не хочется править системные h-файлы.

Меня смущает, что разработчики так неаккуратно выбрали идентификатор.
как вариант - сделайте отдельный C-шный файл, в котором будет включаться этот заголовочный файл и в котором будет Ваша функция, которая вызывает shutdown_system().


Название: Re: функция shutdown_system()
Отправлено: da-nie от Июля 10, 2017, 12:57:13 pm
А вы вызовите shutdown now через system.


Название: Re: функция shutdown_system()
Отправлено: ia от Июля 10, 2017, 07:19:01 pm
Будете смеяться, но у меня и system() проблемы.
Посмотрите мое соседнее сообщение.


Название: Re: функция shutdown_system()
Отправлено: mike от Июля 11, 2017, 01:19:51 pm
сделать обёртку типа my_shutdown() которую собить С


Название: Re: функция shutdown_system()
Отправлено: Hed от Января 22, 2018, 12:07:03 pm
Тоже стало интересно, можно ли решить данную задачу.
Если кому любопытно, то вот:

Код:
#include <cstdlib>
#include <iostream>

extern "C" {
#define class pclass
#include <sys/shutdown.h>
#undef class
}

int main(int argc, char *argv[])
{
shutdown_system( SHUTDOWN_REBOOT, FLAG_FAST );

std::cout << "System Shutdown" << std::endl;

return EXIT_SUCCESS;
}