Wie bekomme ich den absoluten Pfad zu einem relativen Pfad in C
Hi, als C Anfänger (programmiere sonst in Perl oder Java) bin ich gerade auf ein Problem gestossen. Wenn ich einem Programm als Parameter einen relativen Pfad übergebe, kann das Programm damit leben. Wie komme ich jetzt aber an den absoluten Pfad. int main(int argc, char *argv[]) { struct stat buf; char *filename; // test if argument submitted if (argv[1]) { printf("Starting for the file %s\n", argv[1]); } else { printf("Usage: %s filename\n ", argv[0] ); exit(0); } if(lstat(argv[1], &buf) < 0) { printf("lstat error"); exit(0); } // test if argument points to a readable regular file if ( S_ISREG(buf.st_mode) && access(argv[1], R_OK) == 0) printf("The file is a regular file and is readable by the user \n"); // normalize filename // ???? // getting /home/kroll/file.test from file.test exit(0); } Kann mir jemand auf die Sprünge helfen? Vielen Dank Volker -- Volker Kroll 4mino AG Chief System Developer Chausseestr. 52 b volker.kroll@4mino.de D-10115 Berlin Tel.: +49-30-2888490-0 Fax.: +49-30-2888490-99
Am Die, 16 Jul 2002 schrieb Volker Kroll:
Hi,
als C Anfänger (programmiere sonst in Perl oder Java) bin ich gerade auf ein Problem gestossen. Wenn ich einem Programm als Parameter einen relativen Pfad übergebe, kann das Programm damit leben. Wie komme ich jetzt aber an den absoluten Pfad.
der aktuelle Pfad steht in der Environment-Variable PWD. Environment-Variablen kannst Du mit getenv abfragen. Siehe auch man 3 getenv. Gruß Christoph -- Christoph Maurer - 52072 Aachen - Tux#194235 mailto:christoph-maurer@gmx.de - http://www.christophmaurer.de Auf der Homepage u.a.: Installation von SuSE 7.0 auf Notebook Acer Travelmate 508 T, Elektrotechnik an der RWTH Aachen
Am Die, 2002-07-16 um 16.22 schrieb Volker Kroll:
Hi,
als C Anfänger (programmiere sonst in Perl oder Java) bin ich gerade auf ein Problem gestossen. Wenn ich einem Programm als Parameter einen relativen Pfad übergebe, kann das Programm damit leben. Wie komme ich jetzt aber an den absoluten Pfad. [..] Kann mir jemand auf die Sprünge helfen? Leg Dein Programm so aus, dass der Datein gültig sein muss. Normalerweise ist das ohne Probleme möglich.
Oder aber: man 3 getcwd, man 2 chdir, in Kombination mit diversen String-Funktionen (strcat, etc.), Lässt sich aber meist vermeiden. Ralf
On Tue, 16 Jul 2002 at 16:22 (+0200), Volker Kroll wrote:
als C Anfänger (programmiere sonst in Perl oder Java) bin ich gerade auf ein Problem gestossen. Wenn ich einem Programm als Parameter einen relativen Pfad übergebe, kann das Programm damit leben. Wie komme ich jetzt aber an den absoluten Pfad. int main(int argc, char *argv[]) { struct stat buf; char *filename;
// test if argument submitted if (argv[1]) { printf("Starting for the file %s\n", argv[1]); }
Nur mal interessehalber (bin auch C-Anfänger):
Müsste man nicht zuerst mit argc überprüfen, ob argv[1] überhaupt
existiert, bevor man auf argv[1] zugreift?
,----[ testprogramm.c ]-
| #include
On Tue, 2002-07-16 at 17:48, Bernhard Walle wrote:
On Tue, 16 Jul 2002 at 16:22 (+0200), Volker Kroll wrote:
int main(int argc, char *argv[]) { struct stat buf; char *filename;
// test if argument submitted if (argv[1]) { printf("Starting for the file %s\n", argv[1]); }
Nur mal interessehalber (bin auch C-Anfänger):
Müsste man nicht zuerst mit argc überprüfen, ob argv[1] überhaupt existiert, bevor man auf argv[1] zugreift?
Als perlianer hielt ich diese Variante für korrekt.....
Heißt das jetzt, dass argv[1] nur 'zufällig' genullt ist oder ist das irgendwo definiert, dass immer argv[argc] genullt ist, obwohl der Parameter ja im Prinzip nicht existiert.
Aus K*R: The C Programming Language, 1988², Seite 115 "additionally the standard requires that argv[argc] be a null pointer" Insofern müßte meine Lösung korrekt sein, lasse mich da aber gern belehren. V. -- Volker Kroll 4mino AG Chief System Developer Chausseestr. 52 b volker.kroll@4mino.de D-10115 Berlin Tel.: +49-30-2888490-0 Fax.: +49-30-2888490-99
On Tue, 16 Jul 2002 at 19:13 (+0200), Volker Kroll wrote:
On Tue, 2002-07-16 at 17:48, Bernhard Walle wrote:
On Tue, 16 Jul 2002 at 16:22 (+0200), Volker Kroll wrote:
Heißt das jetzt, dass argv[1] nur 'zufällig' genullt ist oder ist das irgendwo definiert, dass immer argv[argc] genullt ist, obwohl der Parameter ja im Prinzip nicht existiert.
Aus K*R: The C Programming Language, 1988², Seite 115 "additionally the standard requires that argv[argc] be a null pointer"
Dann hast Du natürlich recht. Ich nehme alles zurück und behaupte das Gegenteil. :-) Gruß, Bernhard -- "Wenn es morgens um sechs Uhr an meiner Tür läutet und ich kann sicher sein, daß es der Milchmann ist, dann weiß ich, dass ich in einer Demokratie lebe." -- Winston Churchill
participants (4)
-
Bernhard Walle
-
Christoph Maurer
-
Ralf Corsepius
-
Volker Kroll