Zum Inhalt springen

Unix Befehle in C ausführen


Poldi

Empfohlene Beiträge

Hallo Leutens,

ich will in einem C Programm einen Unix Befehl (chmod 000) ausführen. Kann aber leider nix dazu finden wie mans macht.

Ich wäre sehr dankbar für eure Hilfe, am besten auch mit kleinem Beispiel, damit ich weiß, wie mans anwendet (aus den manpages werde ich oft nicht so schlau ... )

Danke!!

biggrin.gif

Poldi

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi Poldi,

in der stdlib.h von ANSI-C gibt es

int system(const char* string);

return value ist 0.

system(NULL) returniert Non-Zero, wenn ein command procossor laeuft, ansonsten 0.

Zum Aufruf von Programmen nimmt man exec().

Alles klar? wink.gif

Uli

------------------

Uli's Prüfungspages ... die Seite mit den Prüfungshinweisen

Link zu diesem Kommentar
Auf anderen Seiten teilen

Für chmod werf einen Blick auf


linux:~ # man 2 chmod


unix $ man -s2 chmod

Dann triffst du direkt auf:

NAME

     chmod, fchmod - change access permission mode of file


SYNOPSIS

     #include <sys/types.h>

     #include <sys/stat.h>


     int chmod(const char *path, mode_t mode);


     int fchmod(int fildes, mode_t mode);

Damit sollte es am einfachsten und schnellsten gehen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

bei uns sagt mir die manpage nix davon daß es ein c befehl ist

wir haben digital unix bei uns

exec gibt es wohl, allerdings wenn ich

"exec(umask 000)"

in den code einfüge, meckert der compiler

hat jemand von euch vielleicht ein beispiel für popen() ?? ein kollege meinte, damit würde es gehen, aber ich versteh die manpage mal wieder nicht ... biggrin.gif

Link zu diesem Kommentar
Auf anderen Seiten teilen

danke uli, hab gestern den wald vor bäumen nicht mehr gesehen, war wohl etwas überarbeitet ... *grins*

habs ans laufen gebracht *jubel*

dieses programm treibt mich noch zum wahnsinn, da kann man nix machen

so long ... ich geht jetzt kaffee trinken ...

biggrin.gif

poldi

Link zu diesem Kommentar
Auf anderen Seiten teilen

na mit

system("umask 000");

...!!

<= quasi so wie ihr gesagt habt, meister ...

das problem ist, daß ich noch nicht so der star programmierer bin, die manpages mich meist zur verzweiflung bringen, und ich ansonsten nur 2 anfängerbücher habe, in dem so interessante themen wie reguläre ausdrücke in c komplett ignoriert werden ... *grummel*

...

aber dafür hab ich ja euch ... *grins*

so long ...

poldi

Link zu diesem Kommentar
Auf anderen Seiten teilen

ist egal, hat mir eh nix gebracht ... wenn man aus einem c programm heraus system(umask 000) ausführt, wird dieser befehl in einer untershell ausgeführt, die sofort nach beendigung des befehls auch wieder geschlossen wird. für mich also uninteressant. ich hab mir jetzt ein aufrufscript in tcl geschrieben, ist zwar etwas unelegant, aber es tuts ...

danke trotzdem ...

poldi smile.gif

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi Maddin,

Du bist meiner Meinung nach mit dem Rueckgabewert im Irrtum, jedenfalls wenn Du die Funktion system() aus <stdlib.h> meinst. Die ist im ANSI-C-Standard nun einmal so festgeschrieben, wie ich es oben beschrieben hatte. Alles weitere waere dann eine hausgemachte Eigenart (volgo Standardverstoss) Deines Compile-Time-Environments ohne Allgemeingueltigkeit.

Ausserdem ruft system() den Kommandozeileninterpreter auf und nicht ein Programm, so wie in Deinem Beispiel. Das muss auch so sein, um Typenkonflikte zu vermeiden. Was sollte z. B. geschehen, wenn Deine "test.exe" einen double returnieren wuerde, waehrend system() einen int liefern muss? Waer doch ziemlicher Murks, oder?

Uli

------------------

Uli's Prüfungspages ... die Seite mit den Prüfungshinweisen

Link zu diesem Kommentar
Auf anderen Seiten teilen

also, in meinem buch steht folgendes:

"int system(const char *s)

der string s wird von einem befehlsprozessor der umgebung ausgeführt, vergleichbar mit einem in einer shell eingegebenen befehl. der status des befehlsprozessors wird zurückgegeben. ist s gleich 0 wird bei nichtvorhandensein eines befehlsprozessors der wert 0, ansonsten ein wert ungleich 0 zurückgegeben."

alles klar?

gruß,

poldi smile.gif

Link zu diesem Kommentar
Auf anderen Seiten teilen

aaalso ...

ich hab da gar nix verwechselt mit NULL und 0, wenn dann war das Andre Wilms, der das buch "c programmierung lernen" geschrieben hat (verlag: addison-wesley).

so ein greenhorn bin ich dann auch nicht mehr, daß ich NULL und 0 verwechsle ... biggrin.gif

cheerio ...

poldi

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...