Ma`lumotlarni o`qish va yozish. Quyi darajada ma`lumotlarni kiritish va
chiqarish
read () va
write () funksiyalari orqali amalga oshiriladi. Bu funksiyalar
prototiplari quyidagi ko`rinishga ega:
int read (int fd, char * buffer; unrigned int count)
int write (int fd, char * buffer; unsiqned int count)
Ikkala funksiya butun o`qilgan yoki yozilgan baytlar sonini qaytaradi.
Read funksiyasi fd deskriptori bilan ochilgan fayldan count parametrida ko`rsatilgan
miqdordagi baytlarni o`qib, buffer ko`rsatkichi orqali ko`rsatilgan bufferga yozadi.
Fayl oxiriga yetganda
read() funksiyasi 0 qiymat qaytaradi. Fayldan o`qishda
xatolik kelib chiqsa -1 qiymat qaytaradi. O`qish fayldagi joriy pozitsiyadan
boshlanadi. Agar fayl matnli rejimda ochilsa, CR va LF simvollari `\n` simvoliga
o`zgartiriladi.
Write() funksiyasi fd deskriptori bilan ochilgan faylga buffer ko`rsatkichi
orqali ko`rsatilgan bufferdan
count parametri orqali ko`rsatilgan miqdordagi
baytlarni yozib qo`yadi. Yozuv joriy pozitsiyadan boshlanadi. Agar fayl matnli
rejimda ochilgan bo`lsa, `\n` simvolini CR va LF simvollar sifatida yoziladi. Agar
yozishda xatolik kelib chiqsa,
write() funksiyasi -1 qiymat qaytaradi.
Errno global
287
o`zgaruvchisi bo`lsa, Errno.h sarlavhali faylda ko`rsatilgan quyidagi o`zgarmaslar
biriga teng bo`ladi.
5.16-jadval. Errno.h kutubxonasining funksiyalari. Nomi
Vazifasi
EACCES
fayl yozuvdan himoyalangan
ENOSPC
tashqi qurilmada bo`sh joy qolmagan
EBADF
noto`g`ri fayl deskriptori
Bu funksiyalar io.h sarlavhali faylda joylashgandir. Quyida bir fayldan
ikkinchisiga nusxa olish dasturini ko`rib chiqamiz:
112-listing.
Output:
#include #include #include #include int main(int argc, char *argv[ ] ) {
int fdin , fdout;
int n;
char buff[BUFSIZ];
if (argc !=3) {
cout<< (“: ”);
cout<<(“\n
%s ”, argv[0]);
return 1; }
if ((fdin =open(argv[1],O_RDONLY)) ==-1) {
perror (argv[1]);
return 1; }
if ((fdout=open(argv[2],
O_WRONLY|O_CREAT|O_TRUNC))== -1) {
perror (argv[2]);
288
return 1; }
while ((n=read(fdin, buff, BUFSIZ))>0)
write (fdout, buff, n );
return 0; }
Bufsiz o`zgarmassi iostream.h sarlavhali faylda aniqlangan bo`lib MS DOS
uchun 512 bayt ga teng.