Короче нужно запускать программу через казанню комбинацию, но не просто запускать а с помощью xinit'a, т.е. execlp ( /usr/X11R6/bin/xinint, /usr/X11R6/bin/xinint, /usr/bin/ldm, 0 ). А после такого запуска, же выполнять код QT. Пробовал делать файл-метку для обозначения запуска, но в итоге получалось через раз, т.е. файл не удалялся.
#include "ldm.h"
size_t get_executable_path ( char* buffer, size_t len )
{
char* path_end;
if ( readlink ("/proc/self/exe", buffer, len ) <= 0 )
return -1;
path_end = strrchr ( buffer, '/' );
if ( path_end == NULL )
return -1;
++path_end;
*path_end = '\0';
return ( size_t ) ( path_end - buffer );
}
void go_to_cur_dir ( )
{
char path[PATH_MAX];
get_executable_path (path, sizeof (path));
chdir ( path );
}
void set_run ( )
{
QFile *run = new QFile ( LOCK );
run->open ( IO_WriteOnly );
run->putch ( getpid ( ) );
run->close ( );
delete run;
}
void rem_run ( )
{
QFile *run = new QFile ( LOCK );
run->remove ( );
delete run;
}
bool run ( )
{
if ( QFile::exists ( LOCK ) )
return true;
else
return false;
}
void wrap ( )
{
passwd *pw= getpwnam ( "root" );
setenv ( "HOME", pw->pw_dir, 1 );
setenv ( "USER", "root", 1 );
pid_t pid = fork ( );
if ( pid == 0 )
{
pid_t pid = fork();
if ( pid == 0 )
{
set_run ( );
execlp ( XINIT, XINIT, LDM, 0 );
rem_run ( );
}
}
rem_run ( );
}
int main ( int argc, char **argv )
{
go_to_cur_dir ( );
if ( run ( ) )
{
rem_run ( );
QApplication app ( argc, argv );
ldm *login = new ldm;
app.setMainWidget ( login );
login->show ( );
return app.exec ( );
}
else
{
wrap ( );
}
}
Заранее спасибо!!!
Ответ на:
комментарий
от Dead
Ответ на:
комментарий
от Dead
Ответ на:
комментарий
от cyclon
Ответ на:
комментарий
от Dead
Ответ на:
комментарий
от cyclon
Ответ на:
комментарий
от cyclon
Ответ на:
комментарий
от Dead
Ответ на:
комментарий
от nobody
Ответ на:
комментарий
от cyclon
Ответ на:
комментарий
от cyclon
Ответ на:
комментарий
от anonymous
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум Через XDM не перезапускается а от рута всё пучком :( (2004)
- Форум Еще раз о fork+exec. (2004)
- Форум Почему не старттует второй бинарник в execlp. (2004)
- Форум warning: cannot pass objects of non-POD type (2004)
- Форум правильная работа SIGTSTP (2019)
- Форум fork(), wait() (2014)
- Форум Boost tcp::socket не работает асинхронное чтение / запись (2023)
- Форум Исследование CryEngine 2 SDK 1.4.0 (2012)
- Форум Pipe (2011)
- Форум Не блокируется pid-файл (2014)