18.31 File-Deskriptor von einem Stream – fileno
 
Manchmal benötigen Sie von einem offenen Stream den File-Deskriptor. Die Syntax dieser Funktion lautet:
int fileno(FILE *fz);
fileno() ist erforderlich, falls eine Datei mit fopen() geöffnet wurde, um den Stream für Funktionen einzusetzen, die einen File-Deskriptor benötigen (z.B. Funktionen wie dup(), dup2() oder fcntl()). Hier ein Listing:
/* fileno.c */
#include <stdio.h>
#include <stdlib.h>
#ifdef __unix__
#include <unistd.h>
#else
#include <io.h>
#endif
int main(void) {
FILE *fz;
int fd,fd2;
char datei[255];
printf("File-Deskriptoren zu stdin, stdout und stderr : ");
printf("%d, %d und %d\n",
fileno(stdin),fileno(stdout),fileno(stderr));
printf("Welche Datei wollen Sie öffnen : ");
scanf("%s",datei);
fz=fopen(datei, "r");
if(!fz) {
perror(NULL);
return EXIT_FAILURE;
}
fd = fileno(fz);
printf("File-Deskriptor zur Datei %s lautet %d\n",datei,fd);
fd2=dup(fd);
printf("File-Deskriptor, der kopiert wurde lautet %d\n",fd2);
return EXIT_SUCCESS;
}
Zu Beginn des Programms werden erst die File-Deskriptoren zu stdin, stdout und stderr ausgegeben, diese sollten immer 0, 1 und 2 sein. Anschließend wird der File-Deskriptor in einer von Ihnen geöffneten Datei ausgegeben. Dieser File-Deskriptor wird jetzt mit der Funktion dup() dupliziert und ebenfalls auf dem Bildschirm ausgegeben.
|