LINUX.ORG.RU

Дисковые операции


0

0

Усложнила алгоритм - и он стал работать чуточку медленее. Выясняю причины. Скажите, вот такая команда производит дисковые операции: offset = fseek(fd, 0, SEEK_CUR); По идее, возвращаться должен указатель текущего положения... есть ли дергание головок винта?

anonymous

Сорри: lseek...

anonymous
()

При сиках никакого дёрганья нет в принципе. Рекомендую поглядеть fs/read_write.c. Там только идёт изменения оффсета в структуре file и всё.

ms
()
Ответ на: комментарий от anonymous

А если идет изменение в оффсета в структуре, рано или поздно головка туда уйдет (если область не находится, скажем, в кэше винта)?

anonymous
()
Ответ на: комментарий от anonymous

Вот же код который пользуется 99% реализаций файловых систем. На границу конца всё проверяется. По сему никто никуда не бегает и не дёргается.

loff_t generic_file_llseek(struct file *file, loff_t offset, int origin)
{
long long retval;
struct inode *inode = file->f_mapping->host;

down(&inode->i_sem);
switch (origin) {
case 2:
offset += inode->i_size;
break;
case 1:
offset += file->f_pos;
}
retval = -EINVAL;
if (offset>=0 && offset<=inode->i_sb->s_maxbytes) {
if (offset != file->f_pos) {
file->f_pos = offset;
file->f_version = 0;
}
retval = offset;
}
up(&inode->i_sem);
return retval;
}

ms
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.