размер файла и linux api
От: scsnow  
Дата: 30.09.08 06:27
Оценка:
есть файловый дескриптор, открытый так:
int fp;
fp=open("file.txt",O_RDONLY);

задача:
определить размер файла file.txt

очевидное решение:
int len,size;
char buf[1024];
size=0;
while (len=read(fp,buf,1024)) size+=len;

однако требуется что-то более разумное...
Re: размер файла и linux api
От: php-coder Чехия http://slava-semushin.blogspot.com
Дата: 30.09.08 06:29
Оценка:
Здравствуйте, scsnow, Вы писали:

S>есть файловый дескриптор, открытый так:

S>int fp;
S>fp=open("file.txt",O_RDONLY);

S>задача:

S>определить размер файла file.txt

fstat() и потом использовать поле st_size.
Re: размер файла и linux api
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 30.09.08 06:33
Оценка: +1
Здравствуйте, scsnow, Вы писали:

S>есть файловый дескриптор, открытый так:

S>int fp;
S>fp=open("file.txt",O_RDONLY);

S>задача:

S>определить размер файла file.txt

S>очевидное решение:

S>int len,size;
S>char buf[1024];
S>size=0;
S>while (len=read(fp,buf,1024)) size+=len;

Это шутка такая?

1) fstat() на дескриптор, выдаст кучу данных, в st_size будет размер (номер последней известной позиции плюс 1)
2) lseek() с SEEK_END, его возврат будет размером (вместе с изменением позиции), не забыть вернуть позицию на начало, когда надо будет читать

S>однако требуется что-то более разумное...


Вы бы хоть один учебник по юниксу почитали:) Вот это точно будет разумным.:)
The God is real, unless declared integer.
Re[2]: размер файла и linux api
От: scsnow  
Дата: 30.09.08 09:09
Оценка:
Здравствуйте, netch80, Вы писали:

S>Это шутка такая?

нет, не шутка. из всех функций знаю тока open, write, read, close

S>2) lseek() с SEEK_END, его возврат будет размером (вместе с изменением позиции), не забыть вернуть позицию на начало, когда надо будет читать

аналог rewind скажите, пожалуйста

S>Вы бы хоть один учебник по юниксу почитали Вот это точно будет разумным.

Всему свое время, а щас пока пишу первую программу под *nix
Re[3]: размер файла и linux api
От: php-coder Чехия http://slava-semushin.blogspot.com
Дата: 30.09.08 09:14
Оценка:
Здравствуйте, scsnow, Вы писали:

S>>2) lseek() с SEEK_END, его возврат будет размером (вместе с изменением позиции), не забыть вернуть позицию на начало, когда надо будет читать

S>аналог rewind скажите, пожалуйста

lseek() c SEEK_SET равный 0 попробуйте.
Re[2]: размер файла и linux api
От: Vamp Россия  
Дата: 03.10.08 20:34
Оценка:
N>2) lseek() с SEEK_END, его возврат будет размером (вместе с изменением позиции), не забыть вернуть позицию на начало, когда надо будет читать
Я подозреваю, что это будет небыстро. Проверять неохота )
Да здравствует мыло душистое и веревка пушистая.
Re[3]: размер файла и linux api
От: ДимДимыч Украина http://klug.org.ua
Дата: 03.10.08 21:10
Оценка:
Здравствуйте, Vamp, Вы писали:

N>>2) lseek() с SEEK_END, его возврат будет размером (вместе с изменением позиции), не забыть вернуть позицию на начало, когда надо будет читать

V>Я подозреваю, что это будет небыстро.

Может и медленнее, чем stat, но все же не настолько, чтобы это хоть как-нибудь заметить. lseek() ведь только устанавливает значение переменной, а не обращается к диску.
Обязательно бахнем! И не раз. Весь мир в труху! Но потом. (ДМБ)
Re[4]: размер файла и linux api
От: Vamp Россия  
Дата: 03.10.08 21:15
Оценка:
ДД>Может и медленнее, чем stat, но все же не настолько, чтобы это хоть как-нибудь заметить. lseek() ведь только устанавливает значение переменной, а не обращается к диску.
Не уверен. Я просто не знаю, что там реально происходит в этот момент. Не удивлюсь, если умная ОС проецирует в память кусочек файла, с целью пре-кэширования.
Да здравствует мыло душистое и веревка пушистая.
Re[5]: размер файла и linux api
От: Аноним  
Дата: 06.10.08 08:16
Оценка:
Здравствуйте, Vamp, Вы писали:

ДД>>Может и медленнее, чем stat, но все же не настолько, чтобы это хоть как-нибудь заметить. lseek() ведь только устанавливает значение переменной, а не обращается к диску.

V>Не уверен. Я просто не знаю, что там реально происходит в этот момент. Не удивлюсь, если умная ОС проецирует в память кусочек файла, с целью пре-кэширования.

в linux просто возьмется inode->i_size и соотвественно модифицируется file->f_pos,

не уверен что ОС можно будет назвать "умной" если она на запросы модифицирующие положение в файле
будет что-либо перекешировать, если на каждый запрос пользователя делать "опережение", то никаких
ресурсов не хватит
Re[5]: размер файла и linux api
От: ДимДимыч Украина http://klug.org.ua
Дата: 06.10.08 19:04
Оценка:
Здравствуйте, Vamp, Вы писали:

V>Не удивлюсь, если умная ОС проецирует в память кусочек файла, с целью пре-кэширования.


Умной я бы такую ОС не назвал. Вдруг я писать собрался, а не читать?
Обязательно бахнем! И не раз. Весь мир в труху! Но потом. (ДМБ)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.