Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » C -> Unix -> Prozesse und einfaches programm -> neuling

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
19.10.2005, 22:21 Uhr
~matttt
Gast


Hallo,
ich versuche ganz einfach nur ein programm in C zu schreiben das sein eigenen Namen bei aufruf ändert und dass man mit ps dann sehen kann dass es seinen namen geändert hat...aber ich schaffe es nicht weil ich einfach nidcht weiß wie ich es machen soll:

Hier mal mein Ansatz:

Code:
#include <stdio.h>

int main (int argc, char *argv[])
{
        char* end = "e";
        argv[0]="MY_NEW_NAME";

        while (getchar() != *end){}

        printf(argv[0]);
        printf("\n");

        return 0;
}




Ich habe die schleife weil ich nicht wusste wie es anstellen soll in einer anderen konsole mit ps anzeigen zu lassen dass der Prozess (das Programm) läuft. Leider hat es hier nicht seinen Namen geändert.

Ist vielleicht mit fork() hier die bessere Wahl ?


Wäre nett wenn man mir helfen könnte.
Danke
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
19.10.2005, 22:58 Uhr
Bruder Leif
dances with systems
(Operator)


Moin!

Der Prozeß kann seinen Namen nicht so einfach ändern. Zumindest nicht unter echten Betriebssystemen, wie z.B. Linux. Selbst wenn das ginge, wäre es nicht so möglich, wie Du es versuchst. Erstens kannst Du einem String-Zeiger nicht einfach einen neuen String zuweisen (such mal in der Hilfe nach "strcpy"), und zweitens ist argv[0] NACH dem Start des Programms nur noch eine KOPIE des Namens der ausführbaren Datei -- wenn Du die Kopie überschreibst, ändert sich der ursprüngliche Name noch lange nicht...
--
Mit 40 Fieber sitzt man nicht mehr vor dem PC.
Man liegt im Bett.
Mit dem Notebook.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
19.10.2005, 23:20 Uhr
imhotep
followed the white rabbit


Bin mir nicht ganz sicher, aber ich glaub, es könnte klappen, wenn du argv[0] änderst und dann den Prozess forkst, dann hat der Child einen anderen Namen. (Ohne Garantie)

Und noch ne kleine frage: Was soll das mit dem char pointer?


C++:
int main (int argc, char *argv[])
{
        char end1 = 'e';
        char *end2 = "e";
        argv[0]="MY_NEW_NAME";

        while (getchar() != end1){}          //Vorschlag 1
//     while  (getchar() != end2[0]){}     // Vorschlag 2

        printf(argv[0]);
        printf("\n");

        return 0;
}

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
20.10.2005, 07:48 Uhr
J-jayz-Z
Perl Crack ala Carte
(Operator)


ich kann mir ehrlich gesagt nicht vorstellen, das sich der Prozessname mit der Änderung von ARGV[0] verändert. Dazu müssten wohl etwas aufwendigere Codes aus <modules.h> oder sys/* notwendig sein.
Bitte korrigiert mich, wenn ich Müll erzähle...
--
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="66756e2d736f66742e6465"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
20.10.2005, 09:09 Uhr
virtual
Sexiest Bit alive
(Operator)


Mit fork und exec* Kannst Du den Namen des Prozesse manipulieren, welcher von deinem Programm aus gestartet wurde.
Wenn Dir der Name deines eigenen Programms nicht gefällt, dann mußt Du das Programm mit "mv" eben umbenennen.

Wenn Du den Namen eines laufenden prozesses ändern willst, mußt Du schreibenden Zugriff auf den Kernelspeicher bekommen (das geht indirekt über Module). Aber mir fällt ehrlich gesagt kein sinnvoller Grund ein, warum man das überhaupt tun sollte:

Oder willst Du möglicherweise jemanden ein "rm" als ein "ls" erscheinen lassen? - Das ist nicht sinnvoll, sondern einfach nur Banane.

Die exec* Routinen erlauben es übrigens nur, den Prozessnamen explizit anzugeben, weil es bestimmte Unixprogramme gibt, welche nicht nur anhand der Argumente, sondern eben auch anhand des Namens entscheiden, was für eine Aktion ausgeführt wird. Generell sollte ein Programm schon so sichtbar sein, wie es gestartet wurde, alles andere ist gegen den guten Geschmack.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: