توابع متعددی برای انجام اعمال ورودی خروجی فایل وجود دارند. دو تابع fprintf و fscanf برای نوشتن و خواندن انواع مختلفی از دادهها و با فرمتهای متفاوت روی فایل به کار میروند. البته این دو تابع از سرعت کمی برخوردارند که توصیه میشود از آنها استفاده نگردد. برای ورودی – خروجی رکورد و همچنین سایر ورودی – خروجیها میتوان از دو تابع fread و fwrite استفاده کرد که از سرعت بالایی برخوردارند. الگوی این تابع در فایل stdio.h قرار دارد و به صورتهای زیرند.
int fread (void *buffer , int num_byte , int count , FILE *fp)
int fwrite (void *buffer , int num_byte , int count , FILE *fp)
در این دو الگو پارامتر buffer در مورد تابع fread به ساختمان داده یا متغیری اشاره میکند که دادههای خوانده شده از فایل باید در آن قرار گیرند و این پارامتر در تابع fwrite به محلی از حافظه اشاره میکند که دادههای موجود در آن محل باید در فایل نوشته شوند. پارامتر num_byte در هر دو تابع طول دادهای که باید خوانده یا نوشته شود را مشخص میکند. پارامتر count تعداد عناصری است که طول آن با num_byte مشخص گردید و باید در فایل نوشته یا از فایل خوانده شوند. اشارهگر fp به فایلی اشاره میکند که توابع fread و fwrite باید روی آنها عمل کنند.
مثال مجموعه دستورهای زیر را درنظر بگیرید.
char student [20] ;
char str [10] ;
fwrite (student , sizeof (char) , 20 , fp) ;
fread (str , sizeof (char) , 10 , fp) ;
دستور اول و دوم رشتههایی به طولهای ۲۰ و ۱۰ را تعریف میکنند. دستور سوم، تعداد ۲۰ بایت از اطلاعات موجود در آرایه student را در فایلی که fp به آن اشاره میکند مینویسد. دستور چهارم تعداد ۱۰ بایت از اطلاعات را از فایلی که fp به آن اشاره میکند میخواند و در متغیر str قرار میدهد. توابع fread و fwrite بیشتر در ورودی – خروجی رکورد استفاده میشوند.
مثال به برنامه زیر توجه کنید.
#include<stdio.h>
main()
{
FILE *fp ;
float x = 3.14 ;
if ((fp = fopen(“f1” , “wb”)) = = NULL)
{
printf(“can not open file \n”) ;
return ;
}
fwrite(&x , sizeof(float) , 1 , fp) ;
fclose(fp) ;
}
این برنامه با استفاده از تابع fwrite متغیر float را در فایل مینویسد. در اینجا بافر تابع fwrite متغیری ساده است.