close

Autres langues

Langue: pl

Autres versions - même langue

Version: 2001-12-13 (openSuse - 09/10/07)

Autres sections - même nom

Section: 2 (Appels système)

NAZWA

close - zamkniêcie deskryptora pliku

SK£ADNIA


#include <unistd.h>



int close(int fd);

OPIS

close zamyka deskryptor pliku, tak ¿e nie odnosi siê on ju¿ pó¼niej do ¿adnego pliku i mo¿e byæ u¿yty ponownie. Wszelkie blokady utrzymywane pliku, z którym deskryptor by³ zwi±zany, i których w³a¶cicielem by³ proces, zostaj± usuniête (niezale¿nie od deskryptora plików, którego u¿yto dla uzyskanie blokady).

Je¶li fd jest ostatni± kopi± deskryptora pewnego pliku, zasoby z nim zwi±zane zostaj± zwolnione; je¶li deskryptor by³ ostatnim odniesieniem do pliku, który usuniêto za pomoc± polecenia unlink(2), to plik jest kasowany.

WARTO¦Æ ZWRACANA

close zwraca zero po pomy¶lnym zakoñczeniu, a -1 gdy wyst±pi b³±d.

B£ÊDY

EBADF
fd nie jest prawid³owym deskryptorem otwartego pliku.
EINTR
Funkcja close() zosta³a przerwana przez sygna³.
EIO
Wyst±pi³ b³±d we/wy.

ZGODNE Z

SVr4, SVID, POSIX, X/OPEN, BSD 4.3. SVr4 dokumentuje dodatowy b³±d ENOLINK.

UWAGI

Niesprawdzanie warto¶ci zwracanej przez close jest popularnym, lecz powa¿nym b³êdem w sztuce programowania. Mo¿e siê zdarzyæ, ¿e przy koñcz±cym close zostan± najpierw zg³oszone b³êdy wcze¶niejszej operacji write(2). Niesprawdzanie zwracanej podczas zamykania pliku warto¶ci mo¿e prowadziæ do niesygnalizowanej utraty danych. Jest to obserwowane zw³aszcza w przypadku NFS i quota dyskowych.

Pomy¶lne zamkniêcie nie gwarantuje, ¿e dane zostan± pomy¶lnie zapisane na dysku, gdy¿ j±dro opó¼nia zapisy. Systemy plików nie maja zwyczaju opró¿niania buforów przy zamykaniu strumienia. Je¶li istnieje potrzeba zapewnienia, aby dane zosta³y zapisane fizycznie, nale¿y u¿ywaæ fsync(2). (Zapis zale¿y w tym momencie od w³a¶ciwo¶ci sprzêtowych dysku.)

ZOBACZ TAK¯E

open(2), fcntl(2), shutdown(2), unlink(2), fclose(3), fsync(2)