read() & write() Verwendung ungepufferte E/A. (fd: integer Dateideskriptor)
fread() & fwrite() Verwendung gepufferte I/O. (FILE * Struktur pointer)
Binary an einem Rohr geschriebenen Daten mit write()nicht können binäre Daten mit fread lesen() wegen Byte Ausrichtungen, variable Größen, etc. Es ist ein Mist-Shooting.
Die meisten Low-Level-Gerätetreibercodes verwenden ungepufferte E/A-Aufrufe.
Die meisten E/A auf Anwendungsebene werden gepuffert verwendet.
Verwendung des FILE * und die dazugehörigen Funktionen ist OK auf einer Maschine-zu-Maschine Basis: aber Portabilität verloren auf anderen Architekturen in der Lesen und Schreiben von Binärdaten. fwrite() ist gepufferter E/A und kann zu unzuverlässigen Ergebnissen führen, wenn für eine 64-Bit-Architektur geschrieben und auf einem 32-Bit-System ausgeführt wird; oder (Windows/Linux). Die meisten Betriebssysteme verfügen über Kompatibilitätsmakros in ihrem eigenen Code, um dies zu verhindern.
Für Low-Level-Binär-E/A-Portabilität read() und write() Garantie die gleiche binäre liest und schreibt, wenn sie auf unterschiedlichen Architekturen kompiliert werden. Die grundlegende Sache ist, wählen Sie die eine oder andere und konsistent darüber, in der binären Suite.
<stdio.h> // mostly FILE* some fd input/output parameters for compatibility
// gives you a lot of helper functions -->
List of Functions
Function Description
───────────────────────────────────────────────────────────────────
clearerr check and reset stream status
fclose close a stream
fdopen stream open functions //(fd argument, returns FILE*) feof check and reset stream status
ferror check and reset stream status
fflush flush a stream
fgetc get next character or word from input stream
fgetpos reposition a stream
fgets get a line from a stream
fileno get file descriptor // (FILE* argument, returns fd)
fopen stream open functions
fprintf formatted output conversion
fpurge flush a stream
fputc output a character or word to a stream
fputs output a line to a stream
fread binary stream input/output
freopen stream open functions
fscanf input format conversion
fseek reposition a stream
fsetpos reposition a stream
ftell reposition a stream
fwrite binary stream input/output
getc get next character or word from input stream
getchar get next character or word from input stream
gets get a line from a stream
getw get next character or word from input stream
mktemp make temporary filename (unique)
perror system error messages
printf formatted output conversion
putc output a character or word to a stream
putchar output a character or word to a stream
puts output a line to a stream
putw output a character or word to a stream
remove remove directory entry
rewind reposition a stream
scanf input format conversion
setbuf stream buffering operations
setbuffer stream buffering operations
setlinebuf stream buffering operations
setvbuf stream buffering operations
sprintf formatted output conversion
sscanf input format conversion
strerror system error messages
sys_errlist system error messages
sys_nerr system error messages
tempnam temporary file routines
tmpfile temporary file routines
tmpnam temporary file routines
ungetc un-get character from input stream
vfprintf formatted output conversion
vfscanf input format conversion
vprintf formatted output conversion
vscanf input format conversion
vsprintf formatted output conversion
vsscanf input format conversion
Also für die grundlegende Nutzung würde ich persönlich die oben verwenden, ohne Idiome zu viel zu mischen.
Dagegen
<unistd.h> write()
lseek()
close()
pipe()
<sys/types.h>
<sys/stat.h>
<fcntl.h> open()
creat()
fcntl()
all use file descriptors.
Diese stellen feinkörnige Kontrolle über das Lesen und Schreiben von Bytes (empfohlen für spezielle Geräte und FIFOs (Rohre)).
Also wieder, verwenden Sie, was Sie brauchen, aber halten Sie konsequent in Ihren Idiomen und Schnittstellen. Wenn der Großteil Ihrer Codebasis einen Modus verwendet, verwenden Sie diesen auch, es sei denn, es gibt einen wirklichen Grund nicht zu. Beide Sätze von E/A-Bibliotheksfunktionen sind äußerst zuverlässig und werden millionenfach am Tag verwendet.
HINWEIS-- Wenn Sie CI/O mit einer anderen Sprache sind Schnittstellen, (Perl, Python, Java, C#, lua ...) Check-out, was die Entwickler dieser Sprachen bevor Sie empfehlen schreiben dein C-Code und ersparen Sie sich Ärger.
Diese "ältere Version von Solaris" enthält Solaris 10 (aktuell) - zumindest für 32-Bit-Code. –