Я пытаюсь использовать Qt для создания серверной/клиентской программы, которая работает с Inetd/xinetd в ОС Linux.
Я добавил файл конфигурации службы в /etc/xinetd.d/testServ с этим текстом
service testServ
{
socket_type = stream
protocol = tcp
wait = no
user = root
server = /usr/sbin/testServer
}
Затем я добавил эту строку в /etc/services
testServ 5050/tcp # the service uses the port nr 5050 and tcp protocol
Я создал специальную клиентскую программу, которая подключается к серверу с указанным портом и работает без проблем.
Проблема в серверной программе. Я написал этот код в основной функции серверной программы
Int main(int argc, char *argv[]) {
qDebug()<<"starting the daemon version of server client app";
QApplication app(argc, argv);
setvbuf(stdout, NULL, _IONBF, 0);
setvbuf(stdin, NULL, _IONBF, 0);
QFile fstdin;
QFile fstdout;
fstdout.open(stdout, QFile::WriteOnly|QFile::Unbuffered);
fstdin.open(stdin, QFile::ReadOnly);
CleintProcess clientproc (NULL, &slog, argc, argv, &fstdin, &fstdout);
app.exec();
return 0;
}
Проблема с серверной программой во второй строке основной функции, после этой строки программа не продолжается. Если я печатаю что-то после этой строки, оно не появляется на экране, но если я печатаю что-то до этой строки, появляется сообщение о печати. Я не знаю, почему Inetd/xinetd не работает с QApplication app(argc, argv);
когда я удаляю эту строку и другую строку (app.exe), программа завершается напрямую.
Мне нужно QApplication, потому что я много раз использую его в объекте clientproc(....).
Можете ли вы помочь мне решить эту проблему и заставить qt работать с inetd/xinetd в Linux.
QT_DEBUG_PLUGINS=1
. - person maxik   schedule 28.06.2016QCoreApplication
— этоQApplication
без пользовательского интерфейса (который на самом деле добавляет некоторые виджеты). Демон, по определению, не должен нуждаться в интерфейсе, не так ли? Таким образом, проблема, похоже, заключается в запросе на отображение некоторых вещей, которые демону не разрешено делать. ПридерживайтесьQCoreApplication
. - person maxik   schedule 28.06.2016