லினக்ஸ் கட்டளை ஓபன் கற்கவும்

கதைச்சுருக்கம்

# sys / types.h> # அடங்கும் << ஒரு HREF = "கோப்பு: /usr/include/sys/stat.h"> sys / stat.h> # அடங்கும் << ஒரு HREF = "கோப்பு: /usr/include/fcntl.h"> fcntl.h> int திறந்த (நிலையான கரி * பாதை பெயர் , எண்ணாக கொடிகள் ); எண்ணாக திறந்த (நிலையான கரி * பாதை பெயர் , எண்ணாக கொடிகள் , mode_t முறை ); int creat (const char * pathname , mode_t முறை );

விளக்கம்

திறந்த () கணினி அழைப்பு linux கட்டளை ஒரு pathname ஐ கோப்பு டிஸ்கிரிப்டரில் (ஒரு சிறிய, அல்லாத எதிர்மறை முழுமையானது I / O ஐ படிக்க , எழுத , முதலியவற்றில் பயன்படுத்த) பயன்படுத்தப்படுகிறது. அழைப்பு வெற்றிகரமாக இருந்தால், கோப்பு விவரிப்பு செயல்முறைக்கு தற்போது திறக்கப்படாத மிக குறைந்த கோப்பு டிஸ்கிரிப்டரைக் கொடுக்கிறது. இந்த அழைப்பு புதிய திறந்த கோப்பை உருவாக்கும், வேறு எந்தவொரு செயல்முறையுடனும் பகிரப்படாது. (ஆனால் பகிரப்பட்ட திறந்த கோப்புகள் முட்கரண்டி வழியாக (2) சிஸ்டம் அழைப்பு வழியாக எழுந்திருக்கலாம்.) புதிய கோப்பு விளக்கப்படம் செயல்பட செயல்பாடுகளை முழுவதும் திறக்க வேண்டும் என அமைக்கப்பட்டுள்ளது ( fcntl (2) பார்க்கவும்). கோப்பு ஆஃப்செட் கோப்பின் தொடக்கத்திற்கு அமைக்கப்பட்டது.

அளவுரு கொடிகள் O_RDONLY , O_WRONLY அல்லது O_RDWR ஆகியவற்றில் ஒன்றாகும், இது கோப்பினை திறக்கும் கோப்பினை திறக்க கோரிக்கையை எழுதும்-மட்டும் எழுதவும்-எழுதவும் எழுதவும் எழுதவும், பிட்வைஸ்- அல்லது பின்வருவது பூஜ்ஜியத்துடன் அல்லது அதற்கு அதிகமாகவும்:

O_CREAT

கோப்பு இல்லை என்றால் அது உருவாக்கப்படும். கோப்புகளின் உரிமையாளர் (பயனர் ஐடி) செயலாக்கத்தின் பயனுள்ள பயனர் அடையாளத்திற்கு அமைக்கப்பட்டது. குழு உரிமையாளர் (குழு ஐடி) செயல்பாட்டின் பயனுள்ள குழு ஐடி அல்லது பெற்றோர் கோப்பகத்தின் குழு ஐடி (கோப்பு முறை வகை மற்றும் மவுன்ட் ஆப்ஷன்ஸ், மற்றும் பெற்றோர் கோப்பகத்தின் முறை ஆகியவற்றைப் பொறுத்து, எ.கா. ext2 கோப்பு அமைப்பின் bsdgroups மற்றும் sysvgroups விருப்பங்கள் (8) இல் விவரிக்கப்பட்டுள்ளது.

O_EXCL

O_CREAT உடன் பயன்படுத்தப்படும்போது, ​​கோப்பினை ஏற்கனவே உள்ளிருந்தால் , அது பிழை மற்றும் திறந்த தோல்வி. இந்த சூழலில், குறியீட்டு இணைப்பு உள்ளது, பொருட்படுத்தாமல் அதன் புள்ளிகள் எங்கே. NFS கோப்பு முறைமைகளில் O_EXCL உடைக்கப்பட்டு, பூட்டுதல் பணிகளைச் செய்வதற்கு நம்பியிருக்கும் திட்டங்கள் ஒரு பந்தய நிலைமையைக் கொண்டிருக்கும். லாக்ஃபைல் பயன்படுத்தி அணு கோப்பு பூட்டுதல் செய்வதற்கான தீர்வு அதே fs (எ.கா., ஹோஸ்ட்பெயர் மற்றும் பைட் இணைத்தல்) ஒரு தனித்த கோப்பை உருவாக்குவதாகும், பூட்டுப்பெயருக்கான இணைப்பை உருவாக்க இணைப்பை (2) பயன்படுத்தவும். இணைப்பு ( 0 ) 0 என்றால், பூட்டு வெற்றிகரமாக உள்ளது. இல்லையெனில், தனித்த கோப்பில் stat (2) ஐ அதன் இணைப்பு எண்ணிக்கை 2 ஆக அதிகரித்துள்ளது என்பதைப் பார்க்கவும், இதில் பூட்டு வெற்றிகரமாக உள்ளது.

O_NOCTTY

பாதை பெயர் ஒரு முனையம் சாதனத்தை குறிக்கிறது என்றால் --- tty (4) --- செயல்முறை ஒன்று இல்லையென்றாலும் செயல்முறை கட்டுப்பாட்டு முனையாக மாறும்.

O_TRUNC

கோப்பு ஏற்கனவே உள்ளது மற்றும் ஒரு வழக்கமான கோப்பு மற்றும் திறந்த பயன்முறை எழுதும் எழுத்து (அதாவது, O_RDWR அல்லது O_WRONLY) அனுமதிக்கிறது. அது நீளமாகக் குறைக்கப்படும். கோப்பு FIFO அல்லது டெர்மினல் சாதன கோப்பு என்றால், O_TRUNC கொடி புறக்கணிக்கப்படுகிறது. இல்லையெனில், O_TRUNC விளைவு குறிப்பிடப்படவில்லை. (பல லினக்ஸ் பதிப்புகளில் அது புறக்கணிக்கப்படும், பிற பதிப்புகள், அது ஒரு பிழை வரும்.)

O_APPEND

கோப்பு சேர்க்கப்பட்ட முறையில் திறக்கப்பட்டுள்ளது. ஒவ்வொரு எழுதும் முன், கோப்பு சுட்டிக்காட்டி கோப்பின் முடிவில் நிலைத்து நிற்கும் . ஒன்றுக்கும் மேற்பட்ட செயல்முறை ஒரு முறை கோப்பை தரவு சேர்க்கிறது என்றால் OFSAP கோப்புகளை NFS கோப்பு அமைப்புகளில் சிதைந்த கோப்புகளை வழிவகுக்கும். NFS ஒரு கோப்பில் சேர்ப்பதற்கு ஆதரவளிக்காது, ஏனென்றால் கிளையன் கர்னல் அதை உருவகப்படுத்த வேண்டும், இது ஒரு ரேஸ் நிலையில் இல்லாமல் செய்ய முடியாது.

O_NONBLOCK அல்லது O_NDELAY

முடிந்தவரை, கோப்பினைத் தடுக்கும் முறையில் திறக்கப்படும். திறந்த அல்லது திரும்பப் பெறப்பட்ட கோப்பு விளக்கியில் எந்த அடுத்தடுத்த செயல்பாடுகளிலும் அழைப்பு செயல்முறை காத்திருக்காது. FIFO க்கள் (பெயர்கள் என பெயரிடப்பட்டவை) கையாளப்படுவதற்கு , ஃபூஃபா (4) ஐப் பார்க்கவும். இந்த பயன்முறை FIFO களைக் காட்டிலும் வேறு எந்த கோப்புகளையும் கொண்டிருக்கவில்லை.

O_SYNC

கோப்பு ஒத்திசைவு I / O க்கு திறக்கப்பட்டுள்ளது. தரவரிசைக்குரிய வன்பொருள்க்கு எழுதப்பட்ட வரை தரவு செயலாக்கத்தை தடுக்கிறது. கீழே உள்ள RESTRICTIONS ஐப் பார்க்கவும்.

O_NOFOLLOW

பாதைபெயர் ஒரு குறியீட்டு இணைப்பு என்றால், திறந்த தோல்வி. இது ஒரு FreeBSD நீட்டிப்பு ஆகும், இது லினக்ஸ் பதிப்பு 2.1.126 இல் சேர்க்கப்பட்டது. பாதையின் முந்தைய கூறுகளின் அடையாள இணைப்புகள் தொடர்ந்து பின்பற்றப்படும். Glibc 2.0.100 மற்றும் அதன் தலைப்புகள் இந்த கொடியின் வரையறை அடங்கும்; 2.1.126 க்கு முன்பான கர்னல்கள் அதைப் பயன்படுத்தினால் புறக்கணிக்கப்படும் .

O_DIRECTORY

பாதை அடைவு ஒரு அடைவு இல்லையென்றால், தோல்வியடைந்தால் தோல்வி ஏற்படும். இந்த கொடி லினக்ஸ்-குறிப்பிட்டது, மற்றும் கர்னல் பதிப்பு 2.1.126 இல் சேர்க்கப்பட்டது, எதிரி-இன்-சேவை சிக்கல்களை எதிர்ப்பதற்கு opendir (3) FIFO அல்லது டேப் சாதனத்தில் அழைக்கப்படுகிறது, ஆனால் opendir செயல்படுத்த வெளியே பயன்படுத்தப்பட கூடாது .

O_DIRECT

I / O இன் இந்த கேச் விளைவுகளை இந்த கோப்பிலிருந்து குறைக்க முயற்சிக்கவும். பொதுவாக இது செயல்திறன் குறைந்துவிடும், ஆனால் இது சிறப்பு சூழ்நிலைகளில் பயன்படுகிறது, இதுபோன்ற பயன்பாடுகள் தங்கள் சொந்த கேச்சிங் செய்யும் போது. பயனர் I / O பயனர் இடைவெளி பஃப்பர்களிடம் இருந்து / நேரடியாக செய்யப்படுகிறது. I / O ஒத்திசைவானது, அதாவது, வாசிப்பு (2) முடிந்ததும் அல்லது (2) கணினி அழைப்பை எழுதும்போது தரவு மாற்றப்பட்டு உத்தரவாதம் அளிக்கப்படுகிறது. பரிமாற்ற அளவுகள், மற்றும் பயனர் தாங்கல் மற்றும் கோப்பு ஆஃப்செட் ஆகியவற்றின் சீரமைவு அனைத்தும் கோப்பு முறைமை தருக்க தொகுதி அளவுகளின் மடங்காக இருக்க வேண்டும்.
யுனிக்ஸ் போன்ற அமைப்புகளில் இந்த கொடி ஆதரிக்கப்படுகிறது; கர்னல் பதிப்பு 2.4.10 இல் லினக்ஸின் ஆதரவு சேர்க்கப்பட்டது.
தொகுதி சாதனங்களுக்கான சொற்பொருளாதார ஒத்த இடைமுகம் மூல (8) இல் விவரிக்கப்பட்டுள்ளது.

O_ASYNC

ஒரு சிக்னலை உருவாக்கவும் (SIGIO இயல்புநிலையாக, ஆனால் இது fcntl (2) வழியாக மாற்றப்படலாம், இந்த கோப்பு விளக்கத்தில் உள்ளீடு அல்லது வெளியீடு சாத்தியமாகும். இந்த அம்சமானது டெர்மினல்கள், போலி-டெர்மினல்கள் மற்றும் சாக்கெட்டுகளுக்கு மட்டுமே கிடைக்கிறது. மேலும் விவரங்களுக்கு fcntl (2) ஐப் பார்க்கவும்.

O_LARGEFILE

பெரிய கோப்புகள் கணினிக்கு ஆதரவு அளிக்கும் 32-பிட் கணினிகளில், 31 பிட்டுகளில் திறக்கப்பட முடியாத அளவுகளை அனுமதிக்க முடியாது.

இந்த திறந்த கொடிகள் சில கோப்பு திறக்கப்பட்ட பிறகு fcntl ஐ பயன்படுத்தி மாற்றலாம் .

ஒரு புதிய கோப்பு உருவாக்கப்பட்டால், வாதம் பயன்முறையை பயன்படுத்த அனுமதிக்கிறது. இது செயல்முறை umask மூலம் வழக்கமான முறையில் மாற்றியமைக்கப்படுகிறது: உருவாக்கப்பட்ட கோப்பின் அனுமதிகள் (மோட் & ~ umask) . புதிதாக உருவாக்கப்பட்ட கோப்பின் எதிர்கால அணுகல்களுக்கு மட்டுமே இந்த பயன்முறை பயன்படுகிறது என்பதை கவனத்தில் கொள்க; ஒரு படிக்க-மட்டும் கோப்பு உருவாக்கும் திறந்த அழைப்பு ஒரு படிக்க / எழுத கோப்பு டிஸ்கிரிப்டரை கொடுக்கலாம்.

பின்வரும் குறியீட்டு நிலையான மாறிகளுக்கு வழங்கப்படுகிறது:

S_IRWXU

00700 பயனர் (கோப்பு உரிமையாளர்) படித்து எழுதுகிறார், எழுத அனுமதிக்கிறார்

S_IRUSR (S_IREAD)

00400 பயனர் அனுமதி படித்துள்ளார்

S_IWUSR (S_IWRITE)

00200 பயனர் எழுத அனுமதி உள்ளது

S_IXUSR (S_IEXEC)

00100 பயனர் அனுமதி வழங்கியுள்ளார்

S_IRWXG

00070 குழு அனுமதி, படிக்க, எழுத அனுமதிக்கின்றது

S_IRGRP

00040 குழு அனுமதி பெற்றுள்ளது

S_IWGRP

00020 குழு எழுத அனுமதி உள்ளது

S_IXGRP

00010 குழு அனுமதி வழங்கியுள்ளது

S_IRWXO

00007 மற்றவர்கள் படிக்க, எழுத, அனுமதிக்கிறார்கள்

S_IROTH

00004 மற்றவர்கள் அனுமதிப் படித்துள்ளனர்

S_IWOTH

00002 மற்றவர்கள் எழுத அனுமதி

S_IXOTH

00001 மற்றவர்கள் அனுமதிகளை நிறைவேற்றுகின்றனர்

O_CREAT கொடிகள் இருக்கும்போது, முறைமை குறிப்பிடப்பட வேண்டும், இல்லையெனில் புறக்கணிக்கப்படும்.

O_CREAT | O_WRONLY | O_TRUNC க்கு சமமான கொடிகளுடன் திறக்க சமமாக உள்ளது.

VALUE திரும்பவும்

திறந்த மற்றும் படைப்பாற்றல் புதிய கோப்பகம் , அல்லது -1 ஒரு பிழை ஏற்பட்டால் (இந்த வழக்கில், தவறு தவறு செய்யப்படுகிறது). திறந்த சாதன சாதனங்களை திறக்க முடியும் என்பதை நினைவில் கொள்ளவும், ஆனால் creat அவற்றை உருவாக்க முடியாது - பதிலாக mknod (2) பயன்படுத்தவும்.

UID வரைபடத்துடன் இயக்கப்பட்ட NFS கோப்பு முறைமைகளில், திறந்த கோப்பு டிஸ்கிரிப்டரை திரும்பப் பெறலாம், ஆனால் EACCES உடன் (2) கோரிக்கைகள் மறுக்கப்படும். கிளையன்ட் அனுமதியினைத் திறப்பதன் மூலம் திறந்திருக்கும் , ஆனால் UID வரைபடமானது சேவையால் வாசிக்க மற்றும் எழுத வேண்டிய கோரிக்கைகளில் செய்யப்படுகிறது.

கோப்பு புதிதாக உருவாக்கப்பட்டால், அதன் atime, ctime, mtime புலங்கள் தற்போதைய நேரத்திற்கு அமைக்கப்பட்டிருக்கும், மேலும் இது பெற்றோர் அடைவின் சிட்டி மற்றும் mtime துறைகள் ஆகும். இல்லையெனில், O_TRUNC கொடி காரணமாக கோப்பு திருத்தப்பட்டால், அதன் சிட்டி மற்றும் mtime புலங்கள் தற்போதைய நேரத்திற்கு அமைக்கப்பட்டிருக்கும்.

பிழைகள்

EEXIST

pathname ஏற்கனவே உள்ளது, மேலும் O_CREAT மற்றும் O_EXCL பயன்படுத்தப்பட்டன.

EISDIR

பாதையில் ஒரு அடைவு குறிக்கிறது மற்றும் அணுகல் தொடர்பு கோரிய அணுகல் (அதாவது, O_WRONLY அல்லது O_RDWR அமைக்கப்பட்டது).

EACCES

கோப்பு கோரிய அணுகல் அனுமதிக்கப்படமாட்டாது, அல்லது pathname இல் உள்ள அடைவுகளில் ஒரு தேடலை (இயக்க) அனுமதிப்பதில்லை, அல்லது கோப்பு இன்னும் இல்லை மற்றும் பெற்றோர் அடைவு அணுகல் அனுமதிக்கப்படாது.

ENAMETOOLONG

பாதை பெயர் மிக நீண்டதாக இருந்தது.

ENOENT

O_CREAT அமைக்கப்படவில்லை மற்றும் பெயரிடப்பட்ட கோப்பு இல்லை. அல்லது, pathname இல் ஒரு அடைவு கூறு இல்லை அல்லது ஒரு dangling குறியீட்டு இணைப்பு உள்ளது.

ENOTDIR

அடைவில் ஒரு அடைவு பயன்படுத்தப்படுகிறது ஒரு கூறு உண்மையில், ஒரு அடைவு, அல்லது O_DIRECTORY குறிப்பிட்ட மற்றும் பாதை பெயர் ஒரு அடைவு அல்ல.

ENXIO

O_NONBLOCK | O_WRONLY அமைக்கப்பட்டது, பெயரிடப்பட்ட கோப்பு FIFO மற்றும் எந்த செயல்முறை கோப்பிற்கும் திறக்கப்படவில்லை. அல்லது, கோப்பு ஒரு சாதனம் சிறப்பு கோப்பு மற்றும் அதனுடன் தொடர்புடைய சாதனம் இல்லை.

ENODEV

பாதையில் ஒரு சாதனம் சிறப்பு கோப்பை குறிக்கிறது மற்றும் அதனுடன் தொடர்புடைய சாதனம் இல்லை. (இது ஒரு லினக்ஸ் கர்னல் பிழை - இந்த நிலையில் ENXIO திரும்ப வேண்டும்.)

EROFS

பாதைபெயர் கோப்பு கோப்புறையில் ஒரு கோப்பு குறிக்கிறது மற்றும் எழுத்து அணுகல் கோரப்பட்டது.

ETXTBSY

pathname தற்போது இயங்கக்கூடிய ஒரு இயங்கக்கூடிய படத்தைக் குறிக்கிறது, மேலும் அணுகல் அணுகல் கோரப்பட்டுள்ளது.

EFAULT

அணுகக்கூடிய முகவரி இடத்திற்கு வெளியே பாதை பெயர்கள் .

ELOOP

Pathname ஐ சரிசெய்வதில் பல குறியீட்டு இணைப்புகள் காணப்பட்டன, அல்லது O_NOFOLLOW குறிப்பிடப்பட்டது, ஆனால் பாதைபெயர் ஒரு குறியீட்டு இணைப்பு ஆகும்.

ENOSPC

பாதைப்பெயர் உருவாக்கப்பட வேண்டும் ஆனால் பாதையில் உள்ள சாதனத்தில் புதிய கோப்பிற்கான இடம் இல்லை.

ENOMEM

போதுமான கர்னல் நினைவகம் கிடைக்கவில்லை.

EMFILE

செயல்முறை ஏற்கனவே அதிகபட்ச கோப்புகள் திறந்திருக்கும்.

ENFILE

கணினியில் திறந்திருக்கும் மொத்த எண்ணிக்கைகளின் எண்ணிக்கையை அடைந்துள்ளது.

உறுதிப்படுத்துகிறது

SVr4, SVID, POSIX, X / OPEN, BSD 4.3 O_NOFOLLOW மற்றும் O_DIRECTORY கொடிகள் லினக்ஸ் -சிகிச்சை ஆகும். தங்கள் வரையறைகளை பெற _GNU_SOURCE மேக்ரோ ஒன்றை வரையறுக்க வேண்டும்.

கட்டுப்பாடுகள்

NFS அடிப்படையிலான நெறிமுறைகளில் பல infelicities உள்ளன, O_SYNC மற்றும் O_NDELAY மற்றவர்கள் மத்தியில் பாதிக்கும்.

POSIX OCYNC , O_DSYNC மற்றும் O_RSYNC கொடிகள் தொடர்பான ஒத்திசைக்கப்பட்ட I / O இன் மூன்று வேறுபட்ட மாறுபாடுகளை வழங்குகிறது. தற்போது (2.1.130) இவை அனைத்தும் லினக்ஸின் கீழ் ஒத்திருக்கின்றன.