:: fcntl.h :: F_SETPIPE_SZ néha látszik, néha nem [BUG?]

Fórumok

Sziasztok!

Állítom a pipe méretet (kernel > 2.36), ahogy ez írva vagyon:
fcntl(fd, F_SETPIPE_SZ, méret);

Természetesen a méret < mint a /proc/... - ban meghatározott
érték. Azt mondja a fordító, az F_SETPIPE_SZ - ra, hogy olyan
márpedig nincs. Pedig van, mégpedig a /bits/fcntl.h - ban, amit
az fcntl.h includál be. Ez önmagában őrület.

Fogom a fájlomat és átnevezem fájl.c - ről fájl.cpp-re,
a CXX változót pediglen g++ -ra állítom. És lőn csoda:
máris létezik az F_SETPIPE_SZ. Őrület a köbön (Ö^3)!

Erre varrjatok gombot!

Bele futott ebbe már valaki?

Hozzászólások

Helló,
Nálam a linux/fcntl.h is tartalmazza a F_SETPIPE_SZ-t. Ugyanannyi az értéke és ezzel fordul is. A __USE_GNU nincs definiálva a bits/fcntl.h-ban.

a __USE_GNU .cpp file-ra g++-al definialva van, .c-re gcc-vel nincs.


# include <fcntl.h>

#if defined(__USE_GNU)
#error
#endif

int main() {}

$ g++ x.cpp
x.cpp:4:2: error: #error
$ gcc x.c
$

a __USE_GNU a features.h-ban definialodik, ha van _GNU_SOURCE. Ugy tunik ez c++ alatt automatikus, C alatt explicit meg kell adni

C++ alatt minden include es define megadasa nelkul:


#if defined(_GNU_SOURCE)
#error
#endif

int main() {}

$ g++ x.cpp
x.cpp:3:2: error: #error
$

szerk: szerintem itt arrol lehet szo, hogy c++-ban csak GNU-s rendszerre tudsz fejleszteni (a gnu compilerrel persze), mig C-ben esetleg mas rendszerekre is, tehat nem bug. De csak talalgatok az okokrol..

Ha már ilyen szépen teszteled a GCC vicceit, adhatnál egy esélyt a PCC-nek és a CLang/LLVM párosnak is. Csak hogy könnyebb legyen szívni.