(C) Im "system" Befehl Variable verwenden.
Markus Pitha
- sonstiges
Hallo,
ich habe eine Variable, worin der Pfad vom HOME Verzeichnis des aktuellen Users steht. Jetzt würde ich gerne ein Verzeichnis .ff in diesem HOME Verzeichnis erstellen. Wenn ich aber system("mkdir homedir/.ff"); schreibe, will er mir natürlich ein Verzeichnis im Directory "homedir" anlegen, welches natürlich nicht exisitert. Wie kann ich also in C den Inhalt einer Variable in einem Systembefehl verwenden?
Markus.
Hello Markus,
ich habe eine Variable, worin der Pfad vom HOME Verzeichnis des aktuellen Users steht. Jetzt würde ich gerne ein Verzeichnis .ff in diesem HOME Verzeichnis erstellen. Wenn ich aber system("mkdir homedir/.ff"); schreibe, will er mir natürlich ein Verzeichnis im Directory "homedir" anlegen, welches natürlich nicht exisitert. Wie kann ich also in C den Inhalt einer Variable in einem Systembefehl verwenden?
Was Du so im Groben vorhast, habe ich wohl verstanden.
Allerdings habe ich nicht verstanden, welcher Pfad wo gespeichert ist, wo das Script abgespeichert ist, welchen Pfad Du anlegen willst und wieso Du nicht die PHP-Funktion mkdir() benutzt?
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Hi Tom!
so im Groben vorhast, habe ich wohl verstanden.
Allerdings habe ich nicht verstanden, welcher Pfad wo gespeichert ist, wo das Script abgespeichert ist, welchen Pfad Du anlegen willst und wieso Du nicht die PHP-Funktion mkdir() benutzt?
Weil es in C vielleicht nicht die PHP-Funktion mkdir() gibt ;-) [1]
Grüße,
Fabian St.
[1] Ich weiß, dass viele PHP-eigene Funktionen in C geschrieben sind. Demnach müsste er sich eben den C-Sourcecode der PHP-Funktion mkdir() besorgen...
Hello,
Weil es in C vielleicht nicht die PHP-Funktion mkdir() gibt ;-) [1]
Ach, wie blind. Ich habe die Kategorie irgendwie übersehen. Sorry.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Hi,
so im Groben vorhast, habe ich wohl verstanden.
Allerdings habe ich nicht verstanden, welcher Pfad wo gespeichert ist, wo das Script abgespeichert ist, welchen Pfad Du anlegen willst und wieso Du nicht die PHP-Funktion mkdir() benutzt?
Weil es in C vielleicht nicht die PHP-Funktion mkdir() gibt ;-) [1]
Aber dafür in POSIX ;-)
ich weiß ja nicht, welches System Du nutzt, aber ein Versuch wäre es wert, nach mkdir() zu suchen.
'man 2 mkdir' sagt hier (Linux. LibC Version 2.2.5):
#include <sys/stat.h>
#include <sys/types.h>
int mkdir(const char *pathname, mode_t mode)
mkdir attempts to create a directory named pathname.
mode specifies the permissions to use. It is modified by
the process's umask in the usual way: the permissions of
the created file are (mode & ~umask).
[...]
RETURN VALUE
mkdir returns zero on success, or -1 if an error occurred
(in which case, errno is set appropriately).
usw.
Beispiel:
#include <stdio.h> /* fprintf() */
#include <stdlib.h> /* exit() */
#include <limits.h> /* PATH_MAX */
#include <sys/stat.h> /* für mkdir() */
#include <sys/types.h> /* ditto */
#include <string.h> /* strerror(), strlen() */
#include <errno.h> /* errno */
#ifndef PATH_MAX
#define PATH_MAX 250
#endif
int main(int argc, char **argv){
if(argc < 2){
fprintf(stderr,"Usage: %1.256s directorynames\n", argv[0]);
exit(EXIT_FAILURE);
}
argc--;
while(argc--){
/* Größer PATH_MAX ist jetzt nicht unbedingt
eine wirksame Sicherung ;-) */
if(strlen(argv[argc +1]) > PATH_MAX || mkdir(argv[argc +1],0) != 0){
fprintf(stderr,"mkdir() failed, reason: %1.256s\n",strerror(errno));
exit(EXIT_FAILURE);
}
printf("Verzeichnis %1.256s erfolgreich errichtet\n",argv[argc +1]);
}
exit(EXIT_SUCCESS);
}
so short
Christoph Zurnieden
Hallo,
Du musst eine "Hilfsvariable" anlegen dir den Befehl für system speichern soll:
Mit sprintf kannst du dann reinschreibn was du willst...
char *tmp;
sprintf(tmp,"mkdir %s/.ff",homedir);
system(tmp);
MfG STefan
Hallo,
ich habe eine Variable, worin der Pfad vom HOME Verzeichnis des aktuellen Users steht. Jetzt würde ich gerne ein Verzeichnis .ff in diesem HOME Verzeichnis erstellen. Wenn ich aber system("mkdir homedir/.ff"); schreibe, will er mir natürlich ein Verzeichnis im Directory "homedir" anlegen, welches natürlich nicht exisitert. Wie kann ich also in C den Inhalt einer Variable in einem Systembefehl verwenden?Markus.
Hallo,
char *tmp;
sprintf(tmp,"mkdir %s/.ff",homedir);
system(tmp);
Danke für deine Hilfe. Allerdings funktionierte es bei mir erst dann, wenn ich statt char *tmp zB char tmp[50] schreibe. Warum wurde *tmp als Zeiger auf char deklariert?
Nachtrag:
Falls ich es nicht als char Array deklariert hätte, bekäme ich einen "Segmentation fault" Error.
Markus.
Hi,
Nachtrag:
Falls ich es nicht als char Array deklariert hätte, bekäme ich einen "Segmentation fault" Error.
Was ja auch logisch ist, da der Zeiger nicht initialisiert ist, und auf einen zufälligen (naja, nicht wirklich zufälligen, aber ... ) nicht zugeordneten Speicher zeigt. Du musst entweder den Speicher so wie du es gemacht direkt reservieren, oder dies mit malloc machen.
In etwa so:
char *tmp = (char*)malloc(sizeof(char)*50);
Wobei du dann den mit malloc angeforderten Speicher später wieder freigeben musst.
Grüße Andres
Hi,
Danke für deine Hilfe. Allerdings funktionierte es bei mir erst dann, wenn ich statt char *tmp zB char tmp[50] schreibe. Warum wurde *tmp als Zeiger auf char deklariert?
sprintf() erwartet einen Zeiger auf char. Durch die bloße Deklaration als solcher wurde allerdings noch kein Speicherplatz allokiert, daher wohl die Fehlermeldung. Deine Deklaration "char tmp[50]" allokiert sofort 50 Bytes. Wird der Bezeichner eines Arrays ohne eckige Klammern angegeben (in deinem Fall "tmp"), entspricht dies in C dem Zeiger auf das erste Element. Du übergibst also korrekt "Zeiger auf char".
Gruß,
Andreas.
Danke euch allen.
So etwas ähnliches habe ich mir schon gedacht. Durch deine Bestätigung ist es mir jetzt klar.
Markus.