netch80: (Default)
[personal profile] netch80
Продолжая тему этого...

#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)

Date: 2010-12-30 11:35 am (UTC)
vitus_wagner: My photo 2005 (Default)
From: [personal profile] vitus_wagner
Отселе мораль

lseek(fd,-((off_t)sizeof(buf)),SEEK_END);

Date: 2010-12-30 04:00 pm (UTC)
From: [identity profile] netch80.livejournal.com
Я исправил в варианте -(ssize_t)sizeof(buf), а к off_t оно перевело само; но твой вариант проще.

Date: 2010-12-30 12:09 pm (UTC)
kastaneda: (Default)
From: [personal profile] kastaneda
$ gcc test.c
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-битная.

Date: 2010-12-30 12:21 pm (UTC)
vitus_wagner: My photo 2005 (Default)
From: [personal profile] vitus_wagner
-D_FILE_OFFSET_BITS=64 забыл.

Date: 2010-12-30 03:30 pm (UTC)
ext_605364: geg MOPO4 (Default)
From: [identity profile] gegmopo4.livejournal.com
Да, это сразу бросается в глаза.
1) %llx для off_t, а не long long;
2) унарный минус заведомо беззнакового выражения (sizeof).

Date: 2010-12-30 03:57 pm (UTC)
From: [identity profile] netch80.livejournal.com
%llx - ограничение старой платформы - несущественно.
Минус беззнакового - обычно не диверсия. Но тут хитрое сложение ситуаций.

Date: 2010-12-30 04:13 pm (UTC)
ext_605364: geg MOPO4 (Default)
From: [identity profile] gegmopo4.livejournal.com
На тупоконечной системе было бы существенно.

Date: 2010-12-30 04:19 pm (UTC)
From: [identity profile] netch80.livejournal.com
На всех рассматриваемых юниксах off_t и long long совпадают (и равны int64_t)

Date: 2010-12-30 04:28 pm (UTC)
From: [identity profile] netch80.livejournal.com
Смотрю, не вижу ничего противоречащего.
Если речь про _FILE_OFFSET_BITS, меня те места, где он не 64, не интересуют по причине их безнадёжной отсталости.

Date: 2010-12-30 04:40 pm (UTC)
ext_605364: geg MOPO4 (Default)
From: [identity profile] gegmopo4.livejournal.com
А места, где size_t 32-битный, -- не столь отсталы?

Date: 2010-12-30 04:44 pm (UTC)
From: [identity profile] netch80.livejournal.com
Нет, 32-битные системы будут жить ещё лет 20 минимум, пусть и не на серверах/десктопах.

Date: 2011-01-22 09:46 pm (UTC)
From: [identity profile] lstranger.livejournal.com
О, мои грабли прославились. :)

Profile

netch80: (Default)
netch80

January 2026

S M T W T F S
    1 23
45678910
11121314151617
18192021222324
25262728293031

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 2nd, 2026 09:19 pm
Powered by Dreamwidth Studios