1 Theorie | |
→ | 1.2 Häufig auftretende Problemstellungen |
Zugriffsrechte setzen unter Windows |
Zugriffsrechte setzen unter Linux/Unix |
Die Zugriffsrechte des aktuellen Benutzers werden in Form zweiter Bits _S_IREAD und _S_IWRITE angegeben. Diese bedeuten, dass der Nutzer Lese- bzw. Schreibzugriff auf die Datei hat.
Im Beispielprogramm wird als Kommandozeilen-Argument ein Dateiname erwartet, die Zugriffsrechte des aktuellen Nutzers werden so gesetzt, dass Lesen und Schreiben erlaubt ist (ein evtl. vorhandener Schreibschutz wird also entfernt).
Im Windows-Explorer können die Zugriffsrechte wesentlich umfassender eingestellt werden als mit der _chmod()-Funktion.
/** @file ex042.c Demo-Programm zum Zugriffsrechte setzen fuer Windows.
ex042 <Datei>
*/
/* Copyright (C) 2014-2017 - HS Schmalkalden. All rights reserved. */
#include <stdio.h>
#include <stdlib.h>
#include <io.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <errno.h>
/** Hauptprogramm.
@param argc Anzahl der Kommandozeilen-Argumente.
@param argv Feld mit den Kommandozeilen-Argumenten.
@return 0 bei Erfolg, alle anderen Werte zeigen Fehler an.
*/
int
main(int argc, char *argv[])
{
int exc = EXIT_FAILURE;
/* Test Kommandozeilen-Argumente, 1 Argument (Dateiname) erforderlich. */
if (2 != argc) {
fputs("FEHLER: Falsche Anzahl an Kommandozeilenargumenten!\n", stderr);
fflush(stderr);
goto finished;
}
/* Rechte aendern */
if (0 != _chmod(argv[1], _S_IREAD | _S_IWRITE)) {
fprintf(
stderr,
"FEHLER: Rechteaenderung fuer \"%s\" fehlgeschlagen!\n",
argv[1]
);
fflush(stderr);
goto finished;
}
/* Erfolg vermerken */
exc = 0;
finished:
exit(exc); return exc;
}
/* vim: set ai sw=4 ts=4 expandtab : */
Liegt der Dateiname als WCHAR- bzw. TCHAR-String vor, muss anstelle von _chmod() die Funktion _wchmod() bzw. _tchmod() verwendet werden.
Die Zugriffsrechte sind als dreistelliger oktaler Zahlenwert darstellbar. Die erste Ziffer drückt die Zugriffsrechte des Eigentümers aus. Die zweite Ziffer drückt die Zugriffsrechte der Eigentümer-Gruppe aus. Die dritte Ziffer kennzeichnet die Zugriffsrechte für alle anderen Benutzer.
Jede der drei Ziffern setzt sich aus Summanden für die folgenden Zugriffsrechte zusammen:
4 | Leserecht |
2 | Schreibrecht |
1 | Ausführungsrecht Für Dateien: Datei darf ausgeführt werden. Für Verzeichnisse: Verzeichnis darf durchsucht werden. |
Der Zahlencode 640 bedeutet folgendes:
Der Eigentümer darf die Datei lesen und schreiben (6=4+2).
Mitglieder derselben Grupper wie der Eigentümer dürfen die Datei
lesen (2).
Alle anderen Benutzer haben keinen Zugriff (0) auf die Datei.
Da es sich um einen Oktal-Wert handelt, muss eine führende 0
vorangestellt werden.
Im Beispielprogramm wird als Kommandozeilen-Argument ein Dateiname erwartet, die Zugriffsrechte für diese Datei werden auf 640 gesetzt.
/** @file ex041.c Demo-Programm zum Zugriffsrechte setzen fuer POSIX.
ex041 <Datei>
*/
/* Copyright (C) 2014-2017 - HS Schmalkalden. All rights reserved. */
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
/** Hauptprogramm.
@param argc Anzahl der Kommandozeilen-Argumente.
@param argv Feld mit den Kommandozeilen-Argumenten.
@return 0 bei Erfolg, alle anderen Werte zeigen Fehler an.
*/
int
main(int argc, char *argv[])
{
int exc = EXIT_FAILURE;
/* Test Kommandozeilen-Argumente, 1 Argument (Dateiname) erforderlich. */
if (2 != argc) {
fputs("FEHLER: Falsche Anzahl an Kommandozeilenargumenten!\n", stderr);
fflush(stderr);
goto finished;
}
/* Rechte aendern */
if (0 != chmod(argv[1], 0640)) {
fprintf(
stderr,
"FEHLER: Rechteaenderung fuer \"%s\" fehlgeschlagen!\n",
argv[1]
);
fflush(stderr);
goto finished;
}
/* Erfolg vermerken */
exc = 0;
finished:
exit(exc); return exc;
}
/* vim: set ai sw=4 ts=4 expandtab : */