Продолжая тему
этого...
#include <stdio.h>
#include <fcntl.h>
int main()
{
printf("%llx\n", (off_t)(-sizeof(int)));
return 0;
}
в 32-битке выводит 0xffffffffc. Ура, товарищи.
Исходный код, по которому увидена проблема, содержал
lseek(fd, -sizeof(buf), SEEK_END)
no subject
Date: 2010-12-30 11:35 am (UTC)lseek(fd,-((off_t)sizeof(buf)),SEEK_END);
no subject
Date: 2010-12-30 04:00 pm (UTC)no subject
Date: 2010-12-30 12:09 pm (UTC)test.c: In function ‘main’:
test.c:6: warning: format ‘%llx’ expects type ‘long long unsigned int’, but argument 2 has type ‘long int’
$ ./a.out
804840bfffffffc
Убунта 32-битная.
no subject
Date: 2010-12-30 12:21 pm (UTC)no subject
Date: 2010-12-30 03:30 pm (UTC)1) %llx для off_t, а не long long;
2) унарный минус заведомо беззнакового выражения (sizeof).
no subject
Date: 2010-12-30 03:57 pm (UTC)Минус беззнакового - обычно не диверсия. Но тут хитрое сложение ситуаций.
no subject
Date: 2010-12-30 04:13 pm (UTC)no subject
Date: 2010-12-30 04:19 pm (UTC)no subject
Date: 2010-12-30 04:26 pm (UTC)no subject
Date: 2010-12-30 04:28 pm (UTC)Если речь про _FILE_OFFSET_BITS, меня те места, где он не 64, не интересуют по причине их безнадёжной отсталости.
no subject
Date: 2010-12-30 04:40 pm (UTC)no subject
Date: 2010-12-30 04:44 pm (UTC)no subject
Date: 2011-01-22 09:46 pm (UTC)