Четене на съдържанието на файл

Библиотеката unistd.h съдържа методи за работа с файлове:

#include<unistd.h>
ssize_t read(int fd, void *buf, size_t len);
  • Всяко извикване чете len на брой байтове в buf от текущата позиция на файла, посочен в файловия дескриптор fd.

  • При успех се връща броят байтове записание в buf.

  • При грешка в резултат се връща -1, а информация за грешката се записва във errno.

Всъщност метода за четене може да доведе до много възможности:

  • Връща стойност, равна на len и всички прочетени байтове са запазени в buf. Резултатите са както е предвидено.

  • Връща стойност по-малка от len, но по-голяма от нула. Четените байтове се съхраняват в buf. Това може да се случи, защото сигналът прекъсва четенето в средата, в средата на четенето е възникнала грешка, повече от нула, но е налице по-малко от стойността на байтовете с леки байтове или EOF е достигнато, преди да бъдат прочетени байтове. Преиздаването на прочетеното (с съответно актуализираните стойности buf и len) ще прочете останалите байтове в останалата част от буфера или ще посочи причината за проблема.

  • Връща стойност 0. Това показва EOF. Няма какво да чете.

  • Извикването на метода блокира, тъй като няма налични данни. Това няма да се случи в режим на блокиране.

  • Връща стойност -1 и грешката е зададена на EINTR. Това показва, че е получен сигнал преди четенето на байтове.

  • Връща стойност -1, а грешката е зададена на EAGAIN. Това показва, че четенето би блокирало, защото понастоящем няма налични данни. Това се случва само в режим на блокиране.

  • Връща стойност -1, а грешката е зададена на стойност, различна от EINTR или EAGAIN. Това показва по-сериозна грешка.

Last updated