0 / 0 / 0
Регистрация: 26.02.2009
Сообщений: 4
1

EINVAL в lseek(SEEK_END)

07.05.2009, 12:35. Показов 2182. Ответов 2
Метки нет (Все метки)

есть задача, прочитать раздел жесткого диска.
Даю пользователю права на этот раздел chown User /dev/sda1.

Затем пишу код:
C
1
2
3
4
// открываю раздел для чтения 
int fd = open("/dev/sda1", O_RDONLY);
// пытаюсь узнать размер раздела
long long size = lseek(fd, 0, SEEK_END);
при запуске size = -1, errno = EINVAL. что я делаю не так?

причем раздел вполне рабочий, т.е. он корректно монтируется ntfs3g и на нем благополучно стоит винда.
+ я прочитал и разобрал bootsector раздела и размер диска, указанный там соответствует тому, что даёт fdisk -lu

Добавлено через 55 минут 6 секунд
...решилась проблема

lseek() не работает для диска, нужно было lseek64()... млин
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.05.2009, 12:35
Ответы с готовыми решениями:

Вылетает при использовании системного вызова lseek
Программа ищет строку в файле, они вводятся с клавиатуры. Нужно чтобы работало с любыми размерами...

функция feof(fin) и fseek(fin,0,SEEK_END)
Подскажите пожалуйста, почему вот этот код fseek(fin,0,SEEK_END); printf("%d",feof(fin)); ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
683 / 232 / 16
Регистрация: 15.10.2007
Сообщений: 1,247
07.05.2009, 16:10 2
C
1
2
3
4
 struct stat st; int size;
 int fd = open("/dev/sda1", O_RDONLY);
 fstat(fd,&st);
 size=st.st_size;
Добавлено через 5 минут 16 секунд
попробуй так
0
0 / 0 / 0
Регистрация: 26.02.2009
Сообщений: 4
07.05.2009, 17:58  [ТС] 3
сенкс, но проблема решилась... всё оказалось очень просто:
lseek() по умолчанию не работает, т.к. принимает и возвращает 32-х битное смещение, а нужно 64-бита... так что нужно использовать lseek64()

тема закрыта.
0
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru