Archiv verlassen und diese Seite im Standarddesign anzeigen : [KDE] Module eingehangen?
undefined
22-07-2004, 07:06
Ich habe zwei Fragen zu meiner KDE-3.2.*/QT Anwendung
Ich suche im Moment eine Möglichkeit herauszufinden welche Module im Moment eingehangen sind. Also:
cat /proc/modules | grep ^raw1394
Jedoch dürfte dies wohl keine Optimale Lösung sein weil so viel ich weis dies File(modules) nicht überall bei Linux Distributions an gleicher Position liegt.
Zum zweiten wie kann ich bei der Binär Datei dvgrab (kino.schirmacher.de) eine vernünftige Contolle erstellen. Zurzeit verwende ich diesen Code der mir aber einen Crasch verurssacht.
KProcess proc( parent, name );
Parameter = "dvgrab";
// Parameter += "--interactive";
Parameter += "--help";
proc << ( Parameter );
if ( proc.isRunning() ) {
kdDebug() << "Running:" << endl;
}
Vor allem Blicke ich Moment noch nicht so ganz wie ich ein pid File aufmachen kann damit ich nicht andauernd einen neuen Prozess starte was mir schon passiert ist :( Wenn jemand ein Tutorial kennt wo ich mir den Aufbau etwas genauer ansehen kann wäre mir schon sehr geholfen ;)
gruss undefined
undefined
22-07-2004, 10:45
Das KProzess Problem habe ich jetzt gelöst jedoch gefällt mir das immer noch nicht so ganz mit dem Befehl. Würde mich brennend Interessieren wie man das in KDE besser Lösen kann.
#ifndef KDVKONTROLLER_H
#define KDVKONTROLLER_H
#include <qstringlist.h>
#include <kprocess.h>
class KDVKontroller : public KProcess
{
Q_OBJECT
public:
enum KONTROLL { REWIND = 1, STEPBACK = 2, PLAY = 3, STOP = 4, RECORD = 5, STEPFRONT = 6, FORWARD = 7 };
KProcess Proc;
QStringList Parameter;
KDVKontroller(QObject *parent = 0, const char *name = 0);
~KDVKontroller();
};
#endif
cpp:
#include "kdvkontroller.h"
KDVKontroller::KDVKontroller(QObject *parent, const char *name)
: Proc( parent , name )
{
Proc.setUseShell( TRUE );
char ShellCo[34] = "cat /proc/modules | grep ^raw1394";
Proc << ShellCo;
if ( Proc.start() )
Proc.clearArguments();
}
KDVKontroller::~KDVKontroller()
{}
#include "kdvkontroller.moc"
tuxipuxi
22-07-2004, 11:17
Ich bin mir sehr sicher, dass KDE für das Problem keine Klasse o.ä. bereitstellt.
Wenn du wissen willst ob es eine bessere Lösung gibt, musst du mal nach einem KDE kcontrol module googlen, vielleicht hat jemand ja schonmal ein ähnliches Problem gehabt.
Michael.
anda_skoa
22-07-2004, 17:24
/proc/modules verhält sich ansich wie eine Datei, die man nur lesen kann.
Du könntest sie also ziemlich sicher mit QFile öffnen und auslesen.
Noch was zu deinem Code: es ist dabei vöölig unnötig, dass deine Klasse von KProcess abgeleitet ist, wenn sie dann noch eine KProcess Instanz beinhaltet.
Einfach von QObject hätte glaube ich gereicht.
Kannst du kurz erklären, was du mit pid file meinst?
Ciao,
_
undefined
23-07-2004, 09:01
Kannst du kurz erklären, was du mit pid file meinst?
Ist jetzt nicht dein Ernst oder? :confused:
Wenn du einen MySQL oder Apache Server auf deinem System am laufen hast müstest du deren Pid File unter /var/run/* finden.
Im Pidfile wird die momentane Prozess ID geschrieben weil man sonst wenig Möglichkeit hat herauszufinden wann und wo welcher Prozess am Laufen ist und von welchen User er gestartet wurde. Siehe auch /etc/init.d rcstatus. KProzess gibt mir zwar die momentane ID zurück aber keinerlei Informationen über den Prozess. Daher Brauche ich das Pidfile
anda_skoa
26-07-2004, 02:10
Ist jetzt nicht dein Ernst oder? :confused:
Doch, der Zusammenhang war mir nämlich nicht klar.
Wenn du einen MySQL oder Apache Server auf deinem System am laufen hast müstest du deren Pid File unter /var/run/* finden.
Soweit bekannt
KProzess gibt mir zwar die momentane ID zurück aber keinerlei Informationen über den Prozess. Daher Brauche ich das Pidfile
Welcher PID File?
Startest du leicht einen Systemdaemon der ein PID File schreibt?
Ciao,
_
undefined
26-07-2004, 10:53
Hat sich mittlerweile erledigt. Habe mir selbst eine Routine geschrieben das wenn die Anwendung geschlossen wird der Prozess gekillt wird.
bool KDVKontroller::writepid( int id )
{
QFile Pidfile( PIDFILE );
if ( ! Pidfile.exists() ) {
QTextStream stream( &Pidfile );
if ( Pidfile.open( IO_WriteOnly ) ) {
stream << id;
return TRUE;
} else {
return FALSE;
}
Pidfile.close();
} else {
return TRUE;
}
}
bool KDVKontroller::dvcontaction( QString com , bool why )
{
bool St;
Proc.clearArguments();
if ( why == TRUE )
Proc << DVCONTBIN << "play" << "trickplay" << com;
else
Proc << DVCONTBIN << com << "verbose";
if ( Proc.start() )
St = Proc.isRunning();
else
St = FALSE;
writepid( Proc.pid() );
Proc.clearArguments();
return St;
}
anda_skoa
26-07-2004, 14:55
Hat sich mittlerweile erledigt. Habe mir selbst eine Routine geschrieben das wenn die Anwendung geschlossen wird der Prozess gekillt wird.
Vielleicht könntest du trotzdem noch erklären, warum du ein PID file brauchst.
Kommunizierst du mit einem weiteren externen Programm, dass diese File braucht?
Btw:
if (why)
if (why == true)
ist bischen redundant :)
Und es ist vorteilhaft, sich gleich am Anfang anzugewöhnen, Klassenparameter über Referenzen zu übergeben, nicht alle Klassen haben einen Copy-Constructor und nicht immer ist wie bei QString der Inhalt geshared und muss dann kopiert werden.
Also
void foo(const QString& cmd)
Ciao,
_
Powered by vBulletin® Version 4.2.5 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.