Подскажите, есть ли в Linux API функция для обрезания существующего файла на конкретной позиции? Во вражеском API такая возможность, как ни странно, имеется.
Кажется, это можно сделать
int ftruncate(int fildes, off_t length);
посмотрим, смогу ли я получить fildes...
Обрезание файла.
Модератор: Модераторы разделов
-
RasenHerz
- Сообщения: 1341
- ОС: Arch Linux amd64
Re: Обрезание файла.
int ftruncate(int filedes, off_t length)
финкцией open открываете нужный файл, получаете его дескриптор.
можно еще пользоваться этой функцией:
int truncate(const char *pathname, off_t length)
которая первым параметром принимает имя файла, а не дескриптор открытого файла, к тому же truncate() может только уменьшать размер файла.
P.S. все функции объявлены в unistd.h
финкцией open открываете нужный файл, получаете его дескриптор.
можно еще пользоваться этой функцией:
int truncate(const char *pathname, off_t length)
которая первым параметром принимает имя файла, а не дескриптор открытого файла, к тому же truncate() может только уменьшать размер файла.
P.S. все функции объявлены в unistd.h
-
Stevens
- Сообщения: 11
- ОС: Debian
Re: Обрезание файла.
К несчастью у меня имеется дескриптор типа FILE*. Впрочем, я уже решил проблему уходом от fopen к open и сопутствующим функциям. Удивило что lseek есть, а ltell - фиг там, делайте fstat... не логично как-то.
-
кодировщик
- Сообщения: 974
- Статус: зарёган в пятницу 13
- ОС: Linux
-
RasenHerz
- Сообщения: 1341
- ОС: Arch Linux amd64
Re: Обрезание файла.
кодировщик писал(а): ↑30.04.2009 15:38
С чего это взято?! эти обе функции могут увеличивать или уменьшать размер файла!
У. Ричард Стивенс, Стивен А. Раго "Unix. Профессиональное программирование.", стр.150
-
кодировщик
- Сообщения: 974
- Статус: зарёган в пятницу 13
- ОС: Linux
Re: Обрезание файла.
RasenHerz писал(а): ↑30.04.2009 22:23кодировщик писал(а): ↑30.04.2009 15:38
С чего это взято?! эти обе функции могут увеличивать или уменьшать размер файла!
У. Ричард Стивенс, Стивен А. Раго "Unix. Профессиональное программирование.", стр.150
Предлогаю ещё раз внимательно перечитать эту страницу, это не относится к линуху.
А лучше сами накидайте код и увидете.
-
RasenHerz
- Сообщения: 1341
- ОС: Arch Linux amd64
Re: Обрезание файла.
возможно, читал эту книжку давно - видно прочитал невнимательно, вот и в памяти так отложилось.
если так, то извиняюсь.
P.S. увеличивать размер файла предпочитаю lseek'ом, a уменьшать - ftruncate'ом, так уж получилось по историческим причинам, описанным выше))
если так, то извиняюсь.
P.S. увеличивать размер файла предпочитаю lseek'ом, a уменьшать - ftruncate'ом, так уж получилось по историческим причинам, описанным выше))
-
Red User
- Сообщения: 229
- ОС: Debian
Re: Обрезание файла.
Можно же offset = lseek(fd, 0, SEEK_CUR);
А ведь когда-то не боялись мы программы любой,
И с одним лишь debug'ом выходили на бой,
И искусно написанный вирус встречали как брата
И с одним лишь debug'ом выходили на бой,
И искусно написанный вирус встречали как брата
-
кодировщик
- Сообщения: 974
- Статус: зарёган в пятницу 13
- ОС: Linux