Prvo da skrenem pažnju na važnu stvar: na 32-bitnim arhitekturama je int 32-bitni, a to znači opseg -2147483647 do 2147483648 (tj. isto koliko može memorije da se pokrije, pošto je najčešće 32-bitni sistem takav da koristi i 32-bitne pokazivače) — ovo je sigurno slučajna greška.
Citiraću
http://www.opengroup.org/onlin...edefs/limits.h.html#tag_13_24:
Citat:
Runtime Invariant Values (Possibly Indeterminate)
A definition of one of the symbolic names in the following list shall be omitted from <limits.h> on specific implementations where the corresponding value is equal to or greater than the stated minimum, but is unspecified.
This indetermination might depend on the amount of available memory space on a specific instance of a specific implementation. The actual value supported by a specific instance shall be provided by the sysconf() function.
Takođe, open() poziv zaista vraća „int“, ali najčešće njegov opseg pokriva svu raspoloživu memoriju na računaru, tj. ograničenje je u tom slučaju je hardver, a ne operativni sistem (kao što sam već i rekao).
Uz to, na
http://www.opengroup.org/onlinepubs/007904975/functions/open.html piše:
Citat:
The open() function shall return a file descriptor for the named file that is the lowest file descriptor not currently open for that process. The open file description is new, and therefore the file descriptor shall not share it with any other process in the system.
Eto, znači, moguće je da ti uz svaki pojedinačni proces otvoriš onoliko fajlova koliko opseg int-a omogućava, ako to OS dozvoljava.
Ovaj program jeste POSIX kompatibilan, jer prema
http://www.opengroup.org/onlin...7904975/functions/sysconf.html treba da bude vraćena vrednost -1 u slučaju da ograničenja nema, bez menjanja errno promenljive.
To je ono što sam mislio pod „ne radi“.
Usput, POSIX definicija OPEN_MAX-a je:
Citat:
{OPEN_MAX}
Maximum number of files that one process can have open at any one time.
Minimum Acceptable Value: {_POSIX_OPEN_MAX}
što bi moglo da znači da FreeBSD (ako je rivan ispravno izneo) nije POSIX kompatibilan ;-)
Možda se moje mišljenje promenilo, ali ne i činjenica da sam u pravu.