Обрезание файла.

Модератор: Модераторы разделов

Stevens
Сообщения: 11
ОС: Debian

Обрезание файла.

Сообщение Stevens »

Подскажите, есть ли в Linux API функция для обрезания существующего файла на конкретной позиции? Во вражеском API такая возможность, как ни странно, имеется.

Кажется, это можно сделать
int ftruncate(int fildes, off_t length);
посмотрим, смогу ли я получить fildes...
Спасибо сказали:
Аватара пользователя
RasenHerz
Сообщения: 1341
ОС: Arch Linux amd64

Re: Обрезание файла.

Сообщение RasenHerz »

int ftruncate(int filedes, off_t length)

финкцией open открываете нужный файл, получаете его дескриптор.
можно еще пользоваться этой функцией:

int truncate(const char *pathname, off_t length)

которая первым параметром принимает имя файла, а не дескриптор открытого файла, к тому же truncate() может только уменьшать размер файла.

P.S. все функции объявлены в unistd.h
Спасибо сказали:
Stevens
Сообщения: 11
ОС: Debian

Re: Обрезание файла.

Сообщение Stevens »

К несчастью у меня имеется дескриптор типа FILE*. Впрочем, я уже решил проблему уходом от fopen к open и сопутствующим функциям. Удивило что lseek есть, а ltell - фиг там, делайте fstat... не логично как-то.
Спасибо сказали:
Аватара пользователя
кодировщик
Сообщения: 974
Статус: зарёган в пятницу 13
ОС: Linux

Re: Обрезание файла.

Сообщение кодировщик »

RasenHerz писал(а):
30.04.2009 13:06
к тому же truncate() может только уменьшать размер файла.

С чего это взято?! эти обе функции могут увеличивать или уменьшать размер файла! :crazy:
Спасибо сказали:
Аватара пользователя
RasenHerz
Сообщения: 1341
ОС: Arch Linux amd64

Re: Обрезание файла.

Сообщение RasenHerz »

кодировщик писал(а):
30.04.2009 15:38
RasenHerz писал(а):
30.04.2009 13:06
к тому же truncate() может только уменьшать размер файла.

С чего это взято?! эти обе функции могут увеличивать или уменьшать размер файла! :crazy:

У. Ричард Стивенс, Стивен А. Раго "Unix. Профессиональное программирование.", стр.150
Спасибо сказали:
Аватара пользователя
кодировщик
Сообщения: 974
Статус: зарёган в пятницу 13
ОС: Linux

Re: Обрезание файла.

Сообщение кодировщик »

RasenHerz писал(а):
30.04.2009 22:23
кодировщик писал(а):
30.04.2009 15:38
RasenHerz писал(а):
30.04.2009 13:06
к тому же truncate() может только уменьшать размер файла.

С чего это взято?! эти обе функции могут увеличивать или уменьшать размер файла! :crazy:

У. Ричард Стивенс, Стивен А. Раго "Unix. Профессиональное программирование.", стр.150

Предлогаю ещё раз внимательно перечитать эту страницу, это не относится к линуху.
А лучше сами накидайте код и увидете.
Спасибо сказали:
Аватара пользователя
RasenHerz
Сообщения: 1341
ОС: Arch Linux amd64

Re: Обрезание файла.

Сообщение RasenHerz »

возможно, читал эту книжку давно - видно прочитал невнимательно, вот и в памяти так отложилось.
если так, то извиняюсь.

P.S. увеличивать размер файла предпочитаю lseek'ом, a уменьшать - ftruncate'ом, так уж получилось по историческим причинам, описанным выше))
Спасибо сказали:
Аватара пользователя
Red User
Сообщения: 229
ОС: Debian

Re: Обрезание файла.

Сообщение Red User »

Stevens писал(а):
30.04.2009 14:44
Удивило что lseek есть, а ltell - фиг там, делайте fstat... не логично как-то.

Можно же offset = lseek(fd, 0, SEEK_CUR);
А ведь когда-то не боялись мы программы любой,
И с одним лишь debug'ом выходили на бой,
И искусно написанный вирус встречали как брата
Спасибо сказали:
Аватара пользователя
кодировщик
Сообщения: 974
Статус: зарёган в пятницу 13
ОС: Linux

Re: Обрезание файла.

Сообщение кодировщик »

Red User писал(а):
01.05.2009 16:25
Stevens писал(а):
30.04.2009 14:44
Удивило что lseek есть, а ltell - фиг там, делайте fstat... не логично как-то.

Можно же offset = lseek(fd, 0, SEEK_CUR);

Кстати что за такая функция ltell?! Что-то никогда такую не встречал, возвращает текущую позиция в файле?!
Спасибо сказали: