UNIX Low-Level I/O

Hi!
Da ich es immer besser finde, Low-Level-Funktionen zu benutzen, aber sehr viele System-Programmierer einfach auf die portablen/leichten High-Level-Funtkionen benutzen, habe ich mir gedacht ich poste das einfach mal.

Ich bin mir völlig im Klaren, dass die Meisten hier wissen, wie man mit UNIX und Low-Level-Funktionen umgeht, möchte hiermit einfach nur meinen Respekt an das HaBo zeigen.

Ein Beispiel, wie man mit den Low-Level Funktionen von UNIX auf Dateien zugreift.

Code:
/*Programm, welches das Verwenden der Funktion*/
/* write() erläutert.*/
/*Geschrieben von tcr am 21/05/2005*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <sys/types.h>

int main(int argc, char **argv)
{
	
	ssize_t size;
	int fd;
	char *str;
	
	umask(0);
	
	if(argc < 2)
	{
		fprintf(stderr, "Benutzung: %s datei_zum_Öffnen\n", *argv);
		return EXIT_FAILURE;
	}

	if(argc < 3)
	{
		str = "Keine Angaben gemacht\n";
	}
	else
		str = argv[2];

	size = strlen(str);

	/*---------------------------------------------------------------------
	Neue datei erzeugen					O_CREAT
	zum Schreiben 						O_WRONLY
	Daten am Ende hinzufügen				O_APPEND
	Zugriffsrechte für dir Datei erteilen			modus
	---------------------------------------------------------------------*/
	
	fd = open(argv[1], O_WRONLY | O_APPEND | O_CREAT, 0755);

	if(fd == -1)
	{
		perror("Fehler bei open()");
		return EXIT_FAILURE;
	}
	
	if(write(fd, str, size) != size)
	{
		perror("Fehler bei write()");
	}
	return EXIT_SUCCESS;
}
 
Ok, sehr hübsch.

:)

Mach ruhig weiter in C unter *nix, da kann man viel lernen.

nachtrag: du wirst, wenn du dein programm testest, unter umständen feststellen, dass die rechte nicht korrekt gesetzt wurden. schau dir mal die umask man page an!
 
aus der open Manpage
...in which case
the file is created with mode mode as described in chmod(2) and modified
by the process' umask value (see umask(2))....

Wieso meinst Du sind die Rechte falsch gesetzt?
 
Zurück
Oben