PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : newbi -> c prog



Mat
19-10-2005, 16:37
Hallo,
ich würde gerne ein kleines C-Programm schreiben welches beim Start seinen Namen ändert so dass wenn ich ps aufrufe nur noch der neue Name zu sehen ist....

das muss ich doch mit argv[0] machen oder ?
kann mir jemand auf die Sprünge helfen ?

peschmae
19-10-2005, 17:00
Soviel ich weiss kann argv[0] nach Programmstart read-only sein. Von dem her kannst du das wohl nicht so gut einfach ändern.

MfG Peschmä

Mat
19-10-2005, 17:09
danke,
aber das geht schon.
mit argv[0] kann ich auf den namen des progs zugreifen weil ich ja wenn ich starte es initialisiere....

ändern kann ichs auch mit argv[0] = "irgendwas";
aber wie kann ich denn jetzt während des ablaufs
die prozesse anzeigen lassen und mit ps dann den neuen namen sehen ???

peschmae
19-10-2005, 17:52
Selbst wenn das nicht const ist: ps ist das egal.
ps -aux oder so zeigt das an.

MfG Peschmä

Mat
19-10-2005, 20:16
hmm also hier mal mein code:


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 hab die while schleife drin weil ich sonst nicht weiß wie ich anzeigen lassen kann aus einer anderen shell dass das programm läuft...also dass ich einen prozess am laufen hab...

man könnte doch bestimmt irgendwie mit fork() arbeiten oder so.......?

wie lasse ich in einem c programm die prozesse anzeigen ? :o

ich weiß nicht.....geht das mit execl ?

anda_skoa
19-10-2005, 21:41
ändern kann ichs auch mit argv[0] = "irgendwas";


In deinem Speicherbereich darfst du alles machen was du willst, nur den Kernel interessiert das herzlich wenig.
Der weiß welche Daten er beim Start in den Adressbereich des Programms geladen hat, aber lesen wird er daraus nicht einfach so.



aber wie kann ich denn jetzt während des ablaufs
die prozesse anzeigen lassen und mit ps dann den neuen namen sehen ???

#> ps Af
Sollte alle Prozesse aller User anzeigen die gerade gestartet sind.

Ciao,
_

RapidMax
21-10-2005, 17:30
Du könntest dein Programm mit execv() nochmals starten und dabei argv[0] auf den gewünschten wert setzen. Aber nicht unnötig Konventionen brechen:


The first argument, by convention, should point to the file name associated with the file being executed.


Gruss, Andy