1 Theorie | |
→ | 1.2 Häufig auftretende Problemstellungen |
Übersicht |
Aktuelles Verzeichnis ermitteln unter Windows |
Aktuelles Verzeichnis ermitteln unter Linux/Unix |
Aufgabe |
Das aktuelle Verzeichnis kann unter Windows mit der Funktion
_getcwd(), unter Linux/Unix mit der Funktion getcwd()
ermittelt werden.
Unter Windows kann die Funktion _getcwd() nur in
Konsolenprogrammen verwendet werden.
Es muss ein Puffer bereitgestellt werden, der groß genug für den String ist. Unter Windows sind die Konstanten FILENAME_MAX bzw. _PATH_MAX für die maximale Größe eines Dateinamens definiert, unter Linux/Unix die Konstante MAXPATHLEN.
Die Beispielprogramme ermitteln jeweils das aktuelle Verzeichnis und geben es auf die Standardausgabe aus.
/** @file ex046.c Demo-Programm fuer aktuelles Verzeichnis unter POSIX
ex046
*/
/* Copyright (C) 2014-2017 - HS Schmalkalden. All rights reserved. */
#include <stdio.h>
#include <stdlib.h>
#include <direct.h>
/** Hauptprogramm.
@return 0 bei Erfolg, alle anderen Werte zeigen Fehler an.
*/
int
main(void)
{
char buf[_MAX_PATH];
int exc = EXIT_FAILURE;
/* Aktuelles Verzeichnis ermitteln. */
if (NULL == _getcwd(buf, sizeof(buf))) {
fputs(
"FEHLER: Aktuelles Verzeichnis konnte nicht ermittelt werden!\n",
stderr
);
fflush(stderr);
goto finished;
}
/* Verzeichnis ausgeben. */
if (EOF == fputs(buf, stdout)) {
fputs(
"FEHLER: Ein-/Ausgabefehler beim Schreiben des Verzeichnisnamens!\n",
stderr
);
fflush(stderr);
goto finished;
}
/* Zeilenende ausgeben. */
if (EOF == fputc('\n', stdout)) {
fputs(
"FEHLER: Ein-/Ausgabefehler beim Schreiben des Newline!\n",
stderr
);
fflush(stderr);
goto finished;
}
/* Erfolg vermerken */
exc = EXIT_SUCCESS;
finished:
exit(exc); return exc;
}
/* vim: set ai sw=4 ts=4 expandtab : */
Soll der Verzeichnisname als WCHAR- bzw. TCHAR-String ermittelt werden, muss anstelle von _getcwd() die Funktion _wgetcwd() bzw. _tgetcwd() benutzt werden.
/** @file ex045.c Demo-Programm fuer aktuelles Verzeichnis unter POSIX
ex045
*/
/* Copyright (C) 2014-2017 - HS Schmalkalden. All rights reserved. */
#include <stdio.h>
#include <sys/param.h>
#include <stdlib.h>
#include <unistd.h>
/** Hauptprogramm.
@return 0 bei Erfolg, alle anderen Werte zeigen Fehler an.
*/
int
main(void)
{
char buf[MAXPATHLEN];
int exc = EXIT_FAILURE;
/* Aktuelles Verzeichnis ermitteln. */
if (NULL == getcwd(buf, sizeof(buf))) {
fputs(
"FEHLER: Aktuelles Verzeichnis konnte nicht ermittelt werden!\n",
stderr
);
fflush(stderr);
goto finished;
}
/* Verzeichnis ausgeben. */
if (EOF == fputs(buf, stdout)) {
fputs(
"FEHLER: Ein-/Ausgabefehler beim Schreiben des Verzeichnisnamens!\n",
stderr
);
fflush(stderr);
goto finished;
}
/* Zeilenende ausgeben. */
if (EOF == fputc('\n', stdout)) {
fputs(
"FEHLER: Ein-/Ausgabefehler beim Schreiben des Newline!\n",
stderr
);
fflush(stderr);
goto finished;
}
/* Erfolg vermerken */
exc = EXIT_SUCCESS;
finished:
exit(exc); return exc;
}
/* vim: set ai sw=4 ts=4 expandtab : */