Hi
'su' will vom Terminal (und nicht per Pipe) das Passwort einlesen. Du kannst mit forkpty() bzw. openpty() + fork() erreichen.
Sobald 'su' dein Passwort bestätigt hat, läuft in diesem Terminal dein Programm, damit müssten auch stdin/stdout Umleitungen möglich sein.
Damit 'su' nicht fehlschlägt, solltest du das Passwort zuvor bestätigen, ich glaube die libpam hat da ein entsprechendes Modul.
Ich habe das vor einiger Zeit mal aus den grafischen 'su'-Wrappern (kdesu) gelernt. In deren Quellcodes müsstest du also die Lösung deines Problems finden.
cu
PS: Du kannst natürlich dem Zielprogramm oder einem Hilfsprogramm das SUID-Bit setzen und seinen Owner auf root setzen. So funktioniert schließlich 'su'.
@DirkB danke schonmal für die Tips.
Der Fehler ist gefunden. Ich habe einfach zu oft getCh aufgerufen in der Schleife. Dadurch war der Charakter einfach schon weg und das Programm hat in der getch-Funktion gewartet, dass eine Taste gedrückt wird.
Lösung ist also, als erstes:
character = getCh();
und dann weiter mit dem charackter arbeiten.
Vielen Dank
Hallo liebe Leute,
ich hoffe das ich hier richtig bin.(binn mir nicht sicher ob es der richtige Thread ist^).
Zu meiner Frage:
Ich binn derzeit damit beschäftigt mir Shellscripte näher zu bringen und habe mir vorgenommen ein kleines Script zu schreiben, welches einen ftp Client steuert.
Dieser soll eine recht speziellen Aufgabe haben. Es sollen in bestimmten abständen Logfiles vom Client zum Server übertragen und dann auf dem Client gelöscht werden löschen.
Um mögliche konflikte beim lesen und schreiben zu vermeiden, soll der Client nur dann schreiben wenn der server alle bereits empfangenen Logfiles verarbeitet hatt.
Dazu benutze ich zwei Statusfiles mitells derer sich Client und Server verständigen können (sollen).
Dazu habe ich angefangen ein UML Entwurf zu fertigen und möchte nun gerne eure Meinung dazu hören.
Besonders interessiert mich ob ich eurer meinung nach alle wichtigen Fehlerquellen abgefangen habe bzw. welche ich vergeseen habe.
MfG BabCom
PS: hier ein bild von dem entwurf.
http://img5.fotos-hochladen.net/uploads/ftpscriptv056orvzaw31y.jpg
Sourcecode von tail besorgen (Open source) und nachschauen, was bei tail -f datei gemacht wird.
Ich hab auch sowas mal gebaut - bei eof Position merken Close, Reopen und ab da weiterlesen (mit kleinm sleep wegen Dauerlast).
system oder popen ist fast immer die falsche Lösung. Sie sind sehr ineffizient. Schliesslich wird da ein Prozess gestartet, was zu hunderten von Systemaufrufen führt. In Deinem Fall sind es sogar insgesamt 4 Prozesse. Nämlich einmal xdtool , zwei mal cut und eine shell, die die | -Zeichen interpretiert. Oft kommt nochmal eine weitere Ineffizienz, da die Ausgabe erst mal geparst werden muss.
So nebenbei sind sie auch noch Fehleranfällig, da die Fehlererkennung sehr eingeschränkt ist. Wenn system einen Wert ungleich 0 zurück liefert, weist Du nicht, was schief gelaufen ist.
Also sollte man sich schon ein wenig Mühe machen, die entsprechenden API-Aufrufe heraus zu finden. Das ist in der Regel auch gar nicht so schwer, wenn man es ein paar mal gemacht hat. Hilfreich ist hier übrigens häufig das Tool strace welches die Systemaufrufe eines Prozesses anzeigt. Hätte hier zwar nicht geholfen, aber bei solchen Sachen wie ls oder ifconfig erleichtert das Tool die Suche.
Scheinbar wird das Terminal dann nur ganz zu Beginn des Starts von Matlab gebraucht, denn wenn ich "matlab &" eingebe und in der nächsten Aufforderung ein "exit" so wird Matlab dennoch gestartet. Insofern habe ich das mit dem "disown" noch nicht ausprobiert.
Gestartet mit "nohup" wird Matlab nicht ausgeführt.
Hallo,
ich habe einen Kartenleser den ich unter Ubuntu verwenden möchte bzw. muss. Der Kartenleser funktioniert wie ein Keyboard schickt einfach nur die Keys von dem was er einliest. Das Problem ist jetzt, dass die Desktop Umgebung von Debian und Ubuntu irendwas macht, dass die keys falsch ankommen. Also man bekommt normal einen langen Zahlenstring + ein return gesendet und der String ist einfach schlichtweg kaputt. Manche Zeichen fehlen und manche sind anders.
Nun ja wenn ich mit C die keys direkt auslese kann ich mir den String zusammenbauen der genau so aussieht wies sein sollte.
Was ich jetzt aber noch machen möchte ist, dass die Keys nicht mehr an die Desktop Umgebung gesendet werden. Hat jemand eine Idee wie ich das machen könnte?
Vielen Dank schon mal
Imox
TyRoXx schrieb:
Wo steht im C-Standard, dass die Sequenz glaubwürdig sein muss? Wo steht überhaupt, dass die Periode eine bestimmte Länge haben muss? Ein Pseudozufallsgenerator mit der Periode eins liefert eben immer die gleiche Zahl. 4, 4, 4, 4, 4, 4, 4, 4 kann ich auch würfeln, also warum darf rand das nicht zurückgeben?
Genau auf der Seite, wo steht, daß die Multiplikation zweier ints nicht länger als eine Million Stunden dauert. Würde ich mich jetzt so bekloppt wie Du anstellen, müßte ich a*b meiden. Besser noch: Ich würde verlangen, den *-Operator ganz abzuschaffen.
TyRoXx schrieb:
static int next = 0;
int rand(void)
{
if (next >= RAND_MAX)
{
next = 0;
}
return next++;
}
Ist das "zufällig" genug? Wo ist die Grenze? Warum war meine Implementierung mit dem konstanten Array "übertrieben"?
Keine Lust, gegen jemanden zu argumentieren, der sich absichtlich doof stellt.
Du könntest in der Schliefe einen nonblocking socket zum irc server nutzen,
zusammen mit nohang waitpid für die Kindprozesse.
Nebenbei warum castest du das Ergebis von getppid() ?
Auch wenn du Speicher freigibst, so gibt die Laufzeitumgebung deines Programms diesen oft nicht endgültig an das OS zurück. Das gilt besonders bei kleinen Stücken, da die kleinste Einheit mit der das Programm und das OS Speicher austauschen, die Speicherseite ist, und da dieser Austausch recht aufwändig ist.
Die Bibliotheken (das dürfte die Threadbibliothek sein) nutzen intern Funktionen, die andere Bibliotheken direkt öffnen und Code aus diesen nachladen (dlopen). Die dafür nötigen Dateien müssen logischerweise vorhanden sein und das enthalten, was der Aufrufer erwartet.
Linkt man nun dynamisch gegen die Threadbibliothek, so wird ja letztlich die Threadbibliothek auf dem Zielsystem benutzt. Sofern diese korrekt installiert ist, sind die Dateien, die diese benötigt natürlich auch vorhanden. Linkt man aber statisch, so wird die Threadbibliothek vom Ursprungssystem genommen. Wenn deren Code nun auf einem anderen System versucht, dynamisch den Code für ihre Version nachzuladen, dann muss auf dem Zielsystem eben genau dieser Code an genau dieser Stelle vorhanden sein, sonst geht's schief.
Wirklich etwas tun kann man nicht dagegen. Es gibt Gründe, warum das manche Bibliotheken so machen. Es gibt mWn einen Schalter, mit dem man zumindest die Threadbibliothek so erstellen kann, dass es diese Funktionen nicht benutzt. Mit dem Nachteil, dass dann einige Sachen eben einfach nicht gehen. Das könntest du machen und hoffen, dass dein Programm die so deaktivierten Features nicht benötigt.
pagyei schrieb:
Dann werde ich vermutlich .bsshrc verwenden.
lagalopex schrieb:
Bei den Umgebungsvariablen bin ich gerade nicht sicher, aber das Programm wird ja vom apache mit dessen Rechten ausgeführt, oder? Dann dürfte die eigene .bash_profile nicht geladen werden.
Aber probiers aus, ist ja jetzt nicht so ein riesen Aufwand.
Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (auch C++0x und C++11) in das Forum Linux/Unix verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?
Dieses Posting wurde automatisch erzeugt.
Weil die Zahl zufällig sein muss, die Zufallszahl ist nichts anderes wie der Index eines Arrays, und der muss zufällig ausgewählt werden. Vor dem fork ziehen geht auch nicht, da bekomm ich immer nur 2 Zahlen. Ich versuchs jetzt noch mit der pid + time.
mekick schrieb:
bitte löschen, wie löscht man hier einen beitrag von sich selbst?
Gar nicht.
habe ihn im falschen forum geschrieben.
Lass ihn nächstes Mal einfach stehen, die Mods verschieben ihn schon ins passende Forum.
Gut, umfangreich, aber leider etwas angestaubt:
http://www.sourceware.org/autobook/
Auch lesenswert:
https://www.flameeyes.eu/autotools-mythbuster
Dann gibts noch das neuere Calcote-Buch, aber das müsstest du dir halt kaufen/leihen. Die Manuals sind übrigens auch recht brauchbar.
Aber wie bereits von tntnet gesagt: du willst eigentlich wissen, ob das Programm zur Laufzeit zur Verfügung steht. Was bringt dir z.B. ein tolles x86-Latex auf dem Buildsystem, wenn du das fertige ARM-Binary eigentlich nach dem Build auf dein Rasperry Pi o.ä. kopieren willst?
Danke für deine Antwort,
ich habe mir gedanken gemacht und möchte gerne trotzdem cpp mir in dem kopf ballern das mit apache hab ich verstanden und es liegt vielleicht da dran das ich zu viel auf einmal auslesen will und co das er deshalb so lange brauch oder sogar error 500 oder so anzeigt.
das soll aber nicht das thema sein
ich hab mir nun gedanken gemacht die tage was ich genau will, aufkeinen fall nen eigenen webserver basteln eher ne server seitige api schnittstelle die auch noch etwas mehr können soll.
mein ziel ist es ne Linux server software zu basteln die die function vom SHOUTcast Server und SHOUTcast Transcoder hat also beides in einem mit eigenem webinterface.
Warum ich was eigens schreiben möchte ist diese Shoutcast & Winamp wurden Verkauft und der support von der SHOUTcast Transcoder wurde Eingestellt.
Man kann es zwar noch nutzen nur nicht mehr Offiziel Bekommen und den MP3 Lizenz Schlüssel Bekommt man garnicht mehr.
ich weis das ich mir da was vorgenommen habe
und ich möchte mir nichts von icecast und co abschauen oder so, hab meine eigenen vorstellungen.
was Könnt ihr mir da als Lektüre empfehlen ?
ps: sorry für meine rechtschreibfehler -.-