Среда, 21.08.2019, 17:07
Приветствую Вас, Гость
Главная » 2012 » Август » 28 » Ограничения 0VERFL0W, нудист
11:13
Ограничения 0VERFL0W, нудист


Максимальное значение позиции в файле ограничивается размером типа o f f t.

Большинство машинных архитектур определяют его как тип С long, размер которого



в Linux всегда равен одному слову (обычно это размер регистров общего

назначения машины). Внутри, однако, ядро хранит смещения, используя тип С

long. Это не создает никаких проблем на 64-разрядных машинах, но означает,

что на 32-разрядных машинах при выполнении относительных операций поиска

могут возникать ошибки E0VERFL0W.

Значения ошибок

В случае успеха оба вызова возвращают число считанных или записанных байтов.

Если pread() возвращает значение 0, то это указывает на условие EOF; если

pwriteO возвращает значение 0, то этот вызов ничего не записал в файл. В случае

ошибки оба вызова возвращают значение -1 и соответствующим образом

устанавливают переменную еггпо. Вызов preadO может устанавливать любые

значения еггпо, допустимые для вызовов read() и lseekO. Вызов pwr ite( ) может

устанавливать любые значения, допустимые для wr ite ( ) и lseekO.

Усечение _________файлов

Linux предоставляет два системных вызова, предназначенные для усечения

файлов. Оба они определяются в разнообразных стандартах POSIX и являются

в них обязательными (до той или иной степени). Определения этих вызовов:

%23include <unistd.h>

%23include <sys/types.h>

int ftruncate (int fd. off_t Ten):

и

finclude <un1std.h>

finclude <sys/types.h>

int truncate (const char *path, off t len);

Оба системных вызова усекают указанный файл до длины len. Системный

вызов ftruncateO работает на дескрипторе файла, который передается при

помощи аргумента fd, и этот дескриптор должен быть открытым для записи.

Системный вызов truncateO работает на имени файла, который передается

в аргументе path, и указанный файл должен быть доступным для записи. Оба

вызова в случае успеха возвращают значение 0. Если происходит ошибка, то

они возвращают значение -1 и соответствующим образом устанавливают переменную

еггпо.

Чаще всего эти системные вызовы применяются для уменьшения длины

файла. В случае успеха новая длина файла становится равной значению, которое

содержится в аргументе 1 еп. Данные, находившиеся между новым и старым

концом файла, удаляются, и к ним больше нельзя обратиться при помощи запроса

на чтение.

Эти функции также можно использовать для ?усечения? файлов до длины,

превышающей их первоначальный размер, примерно то же самое делает комбинация

поиска и записи, описанная ранее в разделе ?Поиск за пределами конца

файла?. Добавленные байты заполняются нулями.

Ни одна из этих операций не обновляет текущую позицию в файле.

Например, у нас есть файл pirate.txt длиной 74 байт со следующим содержимым:

Edward Teach was a notorious English pirate.

He was nicknamed Blackbeard.

В том же каталоге, где находится этот файл, выполним следующую программу:

finclude <umstd.h>

finclude <stdio.h>

int main( )

int ret;

ret = truncate ("e;./pirate.txt"e;, 45):

i f (ret — -1)

perror ("e;truncate"e;):

return -1:

return 0.

}

В результате мы получим файл длиной 45 байт с таким содержимым:

Edward Teach was a notorious English pirate.


Вам нравятся нудисты? Тогда смотреть порно нудистов будет лучшим вариантом.
Просмотров: 407 | Добавил: piligrim | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email *:
Код *: