Diajar dina Linux Ubuntu Komando Buka

Synopsis

#include << A HREF = "file: /usr/include/sys/types.h"> sys / types.h> #include << A HREF = "file: /usr/include/sys/stat.h"> sys / stat.h> #include << A HREF = "file: /usr/include/fcntl.h"> fcntl.h> int kabuka (const char * pathname, int umbul); int kabuka (const char * pathname, int umbul, modeu mode_t); int creat (const char * pathname, modeu mode_t);

gambaran

The kabuka () sistem panggero linux paréntah anu dipaké pikeun ngarobah hiji pathname kana descriptor file (a, integer non-négatip leutik keur dipake dina saterusna I / O sakumaha kalayan dibaca, nulis, jeung sajabana). Lamun télépon aya sukses, nu file descriptor balik Wil jadi file descriptor panghandapna ayeuna teu kabuka pikeun prosés. panggero ieu nyiptakeun file muka anyar, moal dibagikeun kalawan sagala proses lianna. (Tapi dibagikeun file kabuka bisa timbul via garpu (2) sistem panggero.) The descriptor file anyar disetel ka tetep kabuka sakuliah fungsi exec (tingali fcntl (2)). The file offset disetel ka awal file.

The umbul parameter nyaeta salah sahiji O_RDONLY, O_WRONLY atanapi O_RDWR nu menta muka file maca wungkul, nulis wungkul atanapi maca / nulis masing-masing bitwise- atanapi 'd kalawan enol atawa leuwih ti handap:

O_CREAT

Lamun file teu aya eta bakal dijieun. Nu boga (pamaké ID) tina file tos disetel ka pamaké ID efektip prosés. Grup kapamilikan (grup ID) diatur boh kana ID group efektip prosés atawa ka grup ID tina diréktori indungna (gumantung tipe filesystem jeung nempelkeun pilihan, jeung mode anu diréktori kolot, tingali, misalna, anu Gunung pilihan bsdgroups na sysvgroups tina filesystem ext2, sakumaha dijelaskeun dina gunung (8)).

O_EXCL

Lamun dipaké kalawan O_CREAT, upami file geus nyampak éta kasalahan sarta kabuka bakal gagal. Dina kontéks ieu, tumbu simbolis aya, paduli dimana titik -na pikeun. O_EXCL geus pegat dina sistem file NFS , program anu ngandelkeun eta pikeun ngajalankeun tugas tumerapna bakal ngandung hiji kaayaan lomba. Solusi pikeun ngajalankeun Ngonci file atom maké lockfile téh ditujukeun pikeun nyieun file unik dina fs sarua (misalna incorporating hostname na pid), pamakéan link (2) nyieun tumbu ka lockfile kana. Mun link () mulih 0, konci anu suksés. Upami teu kitu, pamakéan stat (2) dina file unik lamun rék mariksa lamun count link na geus ngaronjat ka 2, nu hal konci oge suksés.

O_NOCTTY

Mun pathname nujul kana hiji alat terminal --- tingali TTY (4) --- eta moal jadi terminal ngadalikeun prosés urang sanajan prosés nu teu boga salah.

O_TRUNC

Lamun file geus nyampak tur mangrupakeun file biasa jeung mode kabuka ngamungkinkeun nulis (ie, nyaeta O_RDWR atanapi O_WRONLY) eta bakal truncated ka panjangna 0. Upama file mangrupakeun FIFO atanapi file alat terminal, bendera O_TRUNC geus teu dipalire. Upami teu kitu, pangaruh O_TRUNC nyaeta unspecified. (Dina loba Linux Ubuntu versi eta bakal dipaliré; on versi sejen, bakal balikna kasalahan.)

O_APPEND

file dibuka dina modeu append. Sateuacan tiap nulis, nu pointer file ieu diposisikan dina ahir file, sakumaha lamun kalawan lseek. O_APPEND bisa ngakibatkeun file disogok on sistem file NFS lamun leuwih ti hiji prosés appends data kana file anu sakaligus. Ieu kusabab NFS teu ngarojong appending mun file nu, sahingga kernel klien geus simulate eta, nu teu bisa dipigawé tanpa kaayaan lomba.

O_NONBLOCK atanapi O_NDELAY

Nalika mungkin, file dibuka dina modeu non-meungpeuk. Ngayakeun nu kabuka atawa naon baé operasi saterusna dina descriptor file nu geus balik bakal ngabalukarkeun proses nélépon ngadagoan. Keur nyekel agama FIFOs (ngaranna pipa), tingali ogé fifo (4). modeu teu kudu boga pangaruh naon on file lian ti FIFOs.

O_SYNC

file dibuka pikeun sinkron I / O. Sagala nulis s on descriptor file anu dihasilkeun baris meungpeuk proses nelepon dugi data geus fisik ditulis kana hardware kaayaan. Tempo larangan handap, leuwih tiheula.

O_NOFOLLOW

Mun pathname mangrupakeun link simbolis, teras buka teh gagal. Ieu extension FreeBSD, nu ieu ditambahkeun kana Linux Ubuntu dina versi 2.1.126. Tumbu simbolis dina komponén saméméhna tina pathname bakal tetep jadi dituturkeun. The headers ti glibc 2.0.100 sarta engké ngawengku hiji harti bandéra ieu; kernels saméméh 2.1.126 bakal malire deui lamun dipake.

O_DIRECTORY

Mun pathname teu diréktori a, ngabalukarkeun muka gagal. Bendera Ieu Linux Ubuntu-spésifik, sarta ieu ditambahkeun dina kernel Vérsi 2.1.126, ulah aya panolakan-of-jasa masalah lamun opendir (3) disebut dina FIFO atawa tape alat, tapi teu matak dipake di luar tina palaksanaan opendir .

O_DIRECT

Coba pikeun ngaleutikan épék cache tina I / O mun ti file ieu. Sacara umum ieu bakal nguraikeun kinerja, tapi bisa dipake dina kaayaan husus, kayaning lamun aplikasi do cache sorangan. File I / O geus rengse langsung ka / ti buffers spasi pamaké. The I / O nyaeta sinkron, nyaéta dina parantosan tina dibaca (2) atawa nulis (2) sistem panggero, data dijamin mun geus dibikeun. ukuran mindahkeun, sarta alignment of pamaké panyangga na file offset kudu sagala bisa lilipetan tina ukuran block logis tina sistem file.
bendera ieu dirojong dina jumlah sistem Unix-kawas; rojongan ieu ditambahkeun dina Linux Ubuntu di kernel versi 2.4.10.
A panganteur semantically sarupa alat blok ieu dijelaskeun dina atah (8).

O_ASYNC

Ngabangkitkeun sinyal (SIGIO sacara standar, tapi ieu bisa dirobah via fcntl (2)) nalika input atawa output janten kamungkinan dina file descriptor ieu. fitur ieu ngan sadia pikeun terminal, pseudo-terminal, sarta sockets. Tempo fcntl (2) pikeun detil saterusna.

O_LARGEFILE

Dina sistem 32-bit nu ngarojong nu ageung Payil System, ngidinan file anu ukuran teu bisa digambarkeun dina tanggal 31 bit bisa dibuka.

Sababaraha ieu umbul pilihan bisa dirobah maké fcntl sanggeus file geus dibuka.

Mode argumen hususna dina idin pikeun ngagunakeun bisi file anyar anu dijieun. Hal ieu dirobah ku umask prosés di jalan dawam: nu idin ti file dijieun téh (mode & ~ umask). Catet yén mode ieu ngan manglaku ka aksés kahareup tina file nu nembe dijieun; sauran kabuka nu nyiptakeun file dibaca wungkul bisa ogé balik file descriptor dibaca / nulis.

The konstanta simbolis handap disadiakeun pikeun mode:

S_IRWXU

00700 pamaké (file boga) geus maca, nyerat sareng ngaéksekusi idin

S_IRUSR (S_IREAD)

00400 pamaké geus maca idin

S_IWUSR (S_IWRITE)

00200 pamaké boga nulis idin

S_IXUSR (S_IEXEC)

00100 pamaké boga ngaéksekusi idin

S_IRWXG

00070 grup geus maca, nyerat sareng ngaéksekusi idin

S_IRGRP

00040 grup geus maca idin

S_IWGRP

00020 group boga nulis idin

S_IXGRP

00010 group boga ngaéksekusi idin

S_IRWXO

00007 batur geus maca, nyerat sareng ngaéksekusi idin

S_IROTH

00004 batur geus maca idin

S_IWOTH

00002 batur kudu nulis idin

S_IXOTH

00001 batur gaduh ngaéksekusi idin

modeu kudu dieusian nalika O_CREAT nyaeta dina umbul, sarta ieu dipaliré disebutkeun.

creat sarua jeung muka kalayan umbul sarua O_CREAT | O_WRONLY | O_TRUNC.

Balik deui nilai

buka na creat balik ka descriptor file anyar, atawa -1 lamun kasalahan lumangsung (nu hal, errno diatur appropriately). Catet yén kabuka bisa muka alat file husus, tapi creat moal bisa nyieun eta - migunakeun mknod (2) gantina.

Dina file sistem NFS kalawan pemetaan UID diaktipkeun, kabuka bisa balik a descriptor file tapi misalna maca (2) requests anu nampik kalayan EACCES. Ieu kusabab klien nu ngalakukeun kabuka ku mariksa idin, tapi pemetaan UID anu dipigawé ku server kana maca jeung nulis requests.

Lamun file ieu nu nembe dijieun, atime, ctime, sawah mtime na nu disetél kana waktos ayeuna, sarta jadi nu ctime na mtime huma tina diréktori indungna. Upami teu kitu, lamun file ieu dirobah kusabab bendera O_TRUNC, sawah ctime na mtime na nu disetél kana waktu ayeuna.

kasalahan

EEXIST

pathname geus nyampak tur O_CREAT na O_EXCL anu dipaké.

EISDIR

pathname nujul kana diréktori sarta aksés nu dipénta aub tulisan (hal ieu O_WRONLY atanapi O_RDWR diatur).

EACCES

Aksés nu dipénta pikeun file henteu diwenangkeun, atawa salah sahiji directories di pathname teu ngijinan pilarian (ngaéksekusi) idin, atawa file teu aya acan jeung nulis aksés ka diréktori indungna henteu diwenangkeun.

ENAMETOOLONG

pathname teuing panjang.

ENOENT

O_CREAT teu diatur jeung ngaranna file teu aya. Atawa, komponén diréktori di pathname teu aya atawa mangrupakeun link simbolis dangling.

ENOTDIR

A komponén dipaké salaku diréktori di pathname henteu, dina kanyataanana, anu diréktori, atawa O_DIRECTORY ieu dieusian jeung pathname éta teu diréktori a.

ENXIO

O_NONBLOCK | O_WRONLY diatur, anu ngaranna file nyaeta FIFO sarta euweuh proses boga file kabuka pikeun bacaan. Atawa, file mangrupakeun alat file husus tur euweuh alat saluyu aya.

ENODEV

pathname nujul kana hiji alat file husus tur euweuh alat saluyu aya. (Ieu kernel bug Linux Ubuntu - dina kaayaan ENXIO kudu balik.)

EROFS

pathname nujul ka file dina filesystem dibaca wungkul jeung nulis aksés ieu dipénta.

ETXTBSY

pathname nujul kana hiji gambar laksana nu ayeuna keur dibales na aksés nulis ieu dipénta.

EFAULT

titik pathname luar spasi alamat diaksés Anjeun.

ELOOP

Loba teuing Tumbu simbolis anu encountered di resolving pathname, atawa O_NOFOLLOW ieu dieusian tapi pathname éta tumbu simbolis.

ENOSPC

pathname éta bisa dijieun tapi alat ngandung pathname boga kamar keur file anyar.

ENOMEM

memori kernel cukup éta aya.

EMFILE

Prosésna geus boga angka maksimum file muka.

ENFILE

Wates di jumlah total koropak kabuka dina sistem geus ngahontal.

Conforming ka

SVr4, SVID, POSIX, X / OPEN, BSD 4.3 The O_NOFOLLOW jeung umbul O_DIRECTORY téh Linux Ubuntu -specific. Hiji mungkin kudu ngartikeun makro _GNU_SOURCE mun meunang definisi maranéhanana.

Watesan

Aya loba infelicities dina protokol kaayaan NFS, mangaruhan antarana batur O_SYNC na O_NDELAY.

POSIX nyadiakeun keur tilu varian béda tina nyingkronkeun I / O, pakait jeung umbul O_SYNC, O_DSYNC na O_RSYNC. Ayeuna (2.1.130) ieu sadayana sinonim handapeun Linux.