Ник:
Пароль:

Контакты

E-mail: info@starterkit.ru
тел.: +7 922 680-21-73
тел.: +7 922 680-21-74
Телеграм: t.me/starterkit_ru

Способы оплаты

User Info


Добро пожаловать,
Guest

Регистрация или входРегистрация или вход
Потеряли пароль?Потеряли пароль?

Ник:
Пароль:

ПользователейПользователей:0
Поисковых ботовПоисковых ботов:3
ГостейГостей:1

ОбновитьПодробнееВсегоВсего:4
Форум » starterkit.ru » Embedded Linux
функция ioctl в QT
dx
Добавлено 08.03.2011 16:34 Редактировалось 08.03.2011 16:40
0
Сообщение: 1
dx
3.5

Пункты: 7618
Регистрация: 26.10.2010
Пол: Мужчина
Из: Ukraine, Kiev city
с горем пополам QT было поднято. ну вот теперь задача связать мое приложение с собственным драйвером. драйвер по сути сейчас пустышка, которая при вызове ioctl, open, read, write, release пишет printk'ом в лог ядра.
Сначала я пробовал найти функцию ioctl в классе QIODevice. Видимо или плохо искал или просто не судьба. Забил и попробовал как в старые добрые времена:
Код

#include <stdio.h>
#include <fcntl.h>
#include <linux/ioctl.h>
...
...
fptr = open("/dev/module", O_WRONLY);
retval = ioctl(fptr, cmd, param);
close(fptr);

но на это получаю ошибку: ‘ioctl’ was not declared in this scope.
Для моих задач ioctl очень удобна. Может посоветуете аналог этой ф-ции?? Или просто не парить мозги и делать на read, write??
Спуститься к концу Подняться к началу
Персональная информация
MTh
Добавлено 08.03.2011 16:46 Сообщение: 2
MTh
0

Пункты: 921
Регистрация: 19.09.2010
Вообще не было проблем с ioctl - прочитал LDD и как-то оно без проблем пошло и поехало. Скорее всего с хидерами заморочка - не видит такой функции...
Спуститься к концу Подняться к началу
Персональная информация
dx
Добавлено 08.03.2011 17:23 Сообщение: 3
dx
3.5

Пункты: 7618
Регистрация: 26.10.2010
Пол: Мужчина
Из: Ukraine, Kiev city
это я понимаю. но open, read, write, close оно же видит
Спуститься к концу Подняться к началу
Персональная информация
dx
Добавлено 08.03.2011 21:02 Сообщение: 4
dx
3.5

Пункты: 7618
Регистрация: 26.10.2010
Пол: Мужчина
Из: Ukraine, Kiev city
пришел домой, попробовал на другом ПК та же история. Вот мой код:
Код

#include <QtGui>
#include <QWidget>
#include <QGridLayout>
#include <QPushButton>

#include <stdio.h>
#include <fcntl.h>
#include <linux/ioctl.h>

int main(int argc, char **argv)
{
QApplication app(argc, argv);
QWidget *main_window = new QWidget;
QPushButton *button = new QPushButton("quit");
QGridLayout *layout = new QGridLayout;

QObject::connect(button, SIGNAL( clicked() ), &app, SLOT( quit() ));

layout->addWidget(button);
main_window->setLayout(layout);
main_window->show();

int fptr, cmd = 0, param = 0, retval = 0;
fptr = open("/dev/module", O_WRONLY);
retval = ioctl(fptr, cmd, param);
close(fptr);

return app.exec();
}
Спуститься к концу Подняться к началу
Персональная информация
Slavian
Добавлено 09.03.2011 09:14 Сообщение: 5
Slavian
0

Пункты: 1888
Регистрация: 21.05.2010
Стоит посмотреть хедр <linux/ioctl.h, возможно какой то дефайн выключает определение ioctl, подобных проблем не возникало.
Спуститься к концу Подняться к началу
Персональная информация
dx
Добавлено 09.03.2011 12:28 Сообщение: 6
dx
3.5

Пункты: 7618
Регистрация: 26.10.2010
Пол: Мужчина
Из: Ukraine, Kiev city
все решилось. помоглихорошие люди)))

в QT нужно в место #include <linux/ioctl.h> лепить #include <sys/ioctl.h>
Спуститься к концу Подняться к началу
Персональная информация
Форум » starterkit.ru » Embedded Linux