...
#ifndef _OFF_T_
#define _OFF_T_
typedef long _off_t;
#ifndef _NO_OLDNAMES
typedef _off_t off_t;
#endif
#endif
...
Возможно ли обрезать файл не перезаписав его?
$(сабж) Вот стало интересно. Ведь можно спокойно дописывать в файл. А если требуется обрезать конец файла? Для решения проблемы конечно можно или считать файл и записать начало обратно, удалив перед етим оригинальный файл, или же переименовать оригинал, прочитать с него начало и записать на место оригинального файла, удалив потом оригинальный файл. В обеих вариантах необходится без удаления оригинального файла. Конечно проблема не актуальна для небольших файлов. Ну а если надо работать с файлом, размер которого превышает разумный? Можно изловчится и манипулировать большими файлами без существенных затрат памяти, но... ето лениво) Неужели нет способа тихо откусить файлу хвост?
Забыл сказать что ето всё дело у меня затевается под win32 с уклоном в кроссплатформенность.
Но если забить на stdio и посмотреть что предлагает winapi то тут всплывает [FONT="Courier New"]SetEndOfFile[/FONT]. На msdn'е написано что ето как раз то что мне нужно. Её (ету функцию) можно подружыть со стандартными потоками IO, но тогда получается зависимоть от конкретной платформы.
Конечно можно использовать winapi только под окнами, но неужели std* не располагает более "мощьной" [FONT="Courier New"]ftruncate[/FONT]?
Цитата: Bard
неужели std* не располагает более "мощьной" [FONT="Courier New"]ftruncate[/FONT]?
ftruncate64
Цитата: Bard
но неужели std* не располагает более "мощьной" [FONT="Courier New"]ftruncate[/FONT]?
Это POSIX, а не std. А ftruncate64 даже не POSIX.
PS: И там вообще-то не long, а off_t, что как бы намекает.
Ето мысль. Но у меня в mingw есть только одна такая функция (жаль что без цыферок в конце).
[QUOTE=Ramon]И там вообще-то не long, а off_t, что как бы намекает.[/QUOTE]
Да, но:
types.h
Код:
mingw это вообще мерзкая гадость и кроссплатформенностью даже не воняет собственно как и полноценным POSIX'ом впрочем как и WinAPI.
да ну?
[QUOTE=Ramon]а про размерность интегральных типов читайте стандарт.[/QUOTE]
C Language Reference Manual:
Код:
Type | Size in Bits (-o32) | Size in Bits (-n32) | Size in Bits (-64)
char 8 8 8
short 16 16 16
int 32 32 32
long 32 32 64
long long 64 64 64
float 32 32 32
double 64 64 64
long double 64 128 128
pointer 32 32 64
char 8 8 8
short 16 16 16
int 32 32 32
long 32 32 64
long long 64 64 64
float 32 32 32
double 64 64 64
long double 64 128 128
pointer 32 32 64
Цитата: Bard
да ну?
C Language Reference Manual:
C Language Reference Manual:
Код:
Type | Size in Bits (-o32) | Size in Bits (-n32) | Size in Bits (-64)
char 8 8 8
short 16 16 16
int 32 32 32
long 32 32 64
long long 64 64 64
float 32 32 32
double 64 64 64
long double 64 128 128
pointer 32 32 64
char 8 8 8
short 16 16 16
int 32 32 32
long 32 32 64
long long 64 64 64
float 32 32 32
double 64 64 64
long double 64 128 128
pointer 32 32 64
Это не стандарт это фуфло.
PS: А вы соберите mingw'ой нативное 64 битное WinAPI приложение.
уже собирал
Код:
'P','E',x00,x00,x64,x86
усьо пучком