read() & write() sử dụng bộ đệm I/O. (fd: mô tả tập tin số nguyên)
fread() & fwrite() sử dụng đệm I/O. (FILE con trỏ * cấu trúc)
Dữ liệu nhị phân bằng văn bản cho một đường ống với write()có thể không có thể đọc dữ liệu nhị phân với fread(), vì sự sắp xếp, byte, các kích thước khác nhau, v.v.
Hầu hết mã trình điều khiển thiết bị cấp thấp sử dụng các cuộc gọi I/O không được lọc.
Hầu hết I/O cấp ứng dụng đều sử dụng bộ đệm.
Sử dụng FILE * và chức năng liên quan của nó là OK trên cơ sở máy-by-máy: nhưng tính di động bị mất trên kiến trúc khác trong đọc và viết dữ liệu nhị phân. fwrite() là bộ đệm I/O và có thể dẫn đến kết quả không đáng tin cậy nếu được viết cho kiến trúc 64 bit và chạy trên 32 bit; hoặc (Windows/Linux). Hầu hết các hệ điều hành đều có macro tương thích trong mã riêng của chúng để ngăn chặn điều này.
Đối với cấp thấp nhị phân I/O di read() và write() đảm bảo nhị phân cùng đọc và viết khi biên soạn trên kiến trúc khác nhau. Điều cơ bản là chọn cách này hay cách khác và nhất quán về nó, trong suốt bộ nhị phân.
<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
Vì vậy, để sử dụng cơ bản, cá nhân tôi sẽ sử dụng ở trên mà không trộn thành ngữ quá nhiều.
Ngược lại,
<unistd.h> write()
lseek()
close()
pipe()
<sys/types.h>
<sys/stat.h>
<fcntl.h> open()
creat()
fcntl()
all use file descriptors.
Những cung cấp kiểm soát hạt mịn hơn đọc và viết byte (khuyến khích cho các thiết bị đặc biệt và FIFOs (ống)).
Vì vậy, một lần nữa, sử dụng những gì bạn cần, nhưng hãy nhất quán trong các thành ngữ và giao diện của bạn. Nếu hầu hết cơ sở mã của bạn sử dụng một chế độ, hãy sử dụng chế độ đó, trừ khi có lý do thực sự không. Cả hai bộ chức năng thư viện I/O đều cực kỳ đáng tin cậy và được sử dụng hàng triệu lần mỗi ngày.
note-- Nếu bạn đang interfacing CI/O với một ngôn ngữ khác, (perl, python, java, C#, lua ...) séc ra những gì các nhà phát triển trong những ngôn ngữ khuyên trước khi bạn viết mã C của bạn và tiết kiệm cho mình một số rắc rối.
'Phiên bản cũ hơn của Solaris' bao gồm Solaris 10 (hiện tại) - ít nhất là đối với mã 32 bit. –