TIP: Click on subject to list as thread! ANSI
echo: os2prog
to: Jonathan de Boyne Pollard
from: Mike Bilow
date: 1995-01-17 05:57:42
subject: Wanted DB2 or Databaa

Jonathan de Boyne Pollard wrote in a message to Clemens Anhuth:

  > MB>      that a single file cannot be larger than 2 GB, which is
  > MB> the largest number which be represented in a 32-bit signed
  > MB> integer.

CA> but okay, maybe a linux machine provides some better resolutions...

 JdBP>   If Linux follows POSIX 1003.1, it will have implemented
 JdBP> the "offset"   paramenter of the lseek() call -- which is of
 JdBP> type off_t -- as a   signed long integer.

True.  Linux is fairly POSIX compliant, or at least that is the goal.

 JdBP>   ( In addition to the POSIX calls, which at least have the
 JdBP> decency to   have a typedef of off_t, the AT&T iostreams
 JdBP> library declares most file   positioning functions explcitly
 JdBP> as taking signed long parameters. ) 

True also.

 JdBP>   On 386/486/586 machines, a signed long integer is 32 bits
 JdBP> wide (1 of   which is the sign bit) and so restricts the
 JdBP> seekable portion of a file   to 2Gb.

True, but the conclusion is wrong.  A signed long in a C implementation has
no necessary relationship to the machine word size.  We all know this from
our experience with 16-bit machines using compilers with 32-bit longs.

 JdBP>   If it was desired to overcome this limitation, either

 JdBP>     1.  POSIX 1003.1 compliance must be sacrificed, and
 JdBP> lseek() changed,         which still won't cure the problem
 JdBP> with iostreams; or     2.  a CPU with a larger word size
 JdBP> than the Intel x86es must be used. 

I'm afraid I started this discussion...

The actual rule says nothing about machine word size, but imposes only some
very loose requirements:

1. A long must be no smaller than an int.

2. A short must be no larger than an int.

3. An int should be chosen to be most quickly manipulated on a target machine.

As a practical matter, nearly every Unix implementation of C uses 16-bit
shorts and 32-bit ints and longs, and this has been carried over to 32-bit
operating systems, such as OS/2, generally.  A lot of code has probably
been written which assumes the absolute size of short, int, or long, and
which will someday break when those sizes change.

Nothing in ANSI or POSIX prevents someone from implementing a compliant C
compiler with a 64-bit long on the 386/486 platform.  It would be uncommon,
but it would certainly be proper within the standards.
 
-- Mike


---
* Origin: N1BEE BBS +1 401 944 8498 V.34/V.FC/V.32bis/HST16.8 (1:323/107)
SEEN-BY: 12/2442 620/243 624/50 632/348 640/820 690/660 711/409 410 413 430
SEEN-BY: 711/807 808 809 934 942 949 712/353 515 713/888 800/1 7877/2809
@PATH: 323/107 150 3615/50 229/2 12/2442 711/409 808 809 934

SOURCE: echomail via fidonet.ozzmosis.com

Email questions or comments to sysop@ipingthereforeiam.com
All parts of this website painstakingly hand-crafted in the U.S.A.!
IPTIA BBS/MUD/Terminal/Game Server List, © 2025 IPTIA Consulting™.