לערן די Linux Command Open

סינאָפּסיס

# ינקלודעס << אַ הרעף = "טעקע: /וסר/ ינקלודע / סי / טיפּס.ה"> סיס / טייפּס.ה> # ינקלודעס << אַ הרעף = "טעקע: /וסר/ ינקלודע / סיס / סטאַט.ה"> sys / stat.h> # ינקלודע << אַ הרעף = "טעקע: /וסר/ ינקלודע / פקנטלה"> פאָנטנטל.ה> ינט עפענען (קאַנסט טשאַר * פּאַטהנאַמע , ינט פלאַגס ); ינט עפענען (קאָנסט טשאַר * פּאַטהנאַמע , ינט פלאַגס , מאָדע_ט מאָדע ); ינט קרע (קאָנסט טשאַר * פּאַטהנאַמע , מאָדע_ט מאָדע );

באַשרייַבונג

די עפענען () סיסטעם רופן לינוקס באַפֿעלן איז געוויינט צו בייַטן אַ פּאַטהנאַמע אין אַ טעקע דעסקריפּטאָר (אַ קליין, ניט-נעגאַטיוו ינטאַדזשער פֿאַר נוצן אין סאַבסאַקוואַנט I / O ווי מיט לייענען , שרייַבן , אאז"ו ו). ווען די רופן איז מצליח, די טעקע דעסקריפּטאָר איז אומגעקערט צו די לאָואַסט טעקע דעסקריפּטאָר נישט איצט עפענען פֿאַר דעם פּראָצעס. דעם רופן קריייץ אַ נייַע עפענען טעקע, נישט שערד מיט קיין אנדערע פּראָצעס. (אבער שערד עפענען טעקעס קען אויפשטיין דורך די גאָפּל (2) סיסטעם רופן.) דער נייַ טעקע דעסקריפּטאָר איז באַשטימט צו בלייַבן אָפן אַריבער עקסעקוט פאַנגקשאַנז (זען פאָננטל (2)). די טעקע פאָטאָ איז באַשטימט צו דעם אָנהייב פון דער טעקע.

די פּאַראַמעטער פלאַגס איז איינער פון O_RDONLY , O_WRONLY אָדער O_RDWR וואָס ריקווייערז עפן די טעקע לייענען בלויז, שרייַבן-בלויז אָדער לייענען / שרייַבן, ריספּעקטיוולי, bitwise- or 'd with zero or more of the following:

O_CREAT

אויב די טעקע טוט נישט עקסיסטירן, עס וועט זיין באשאפן. די באַזיצער (באַניצער ID) פון די טעקע איז באַשטימט צו די עפעקטיוו באַניצער שייַן פון דעם פּראָצעס. דער גרופּע אָונערשיפּ (גרופּע שייַן) איז באַשטימט אָדער צו די עפעקטיוו גרופּע שייַן פון דעם פּראָצעס אָדער צו די גרופּע שייַן פון דער פאָטער וועגווייַזער (דיפּענדינג אויף פילעסיסטעם טיפּ און בארג אָפּציעס, און די מאָדע פון ​​דער פאָטער וועגווייַזער, זען, למשל, דער אָנקלאַפּן אָפּציעס בסדגראָופּס און סיסווגראָופּס פון די עקסט 2 פילעסיסטעם, ווי דיסקרייבד אין אָנקלאַפּן (8)).

O_EXCL

ווען איר נוצן O_CREAT , אויב דער טעקע איז שוין עקסיסטירט, עס איז אַ טעות און די עפענען וועט פאַרלאָזן. אין דעם קאָנטעקסט, אַ סימבאָליש לינק יגזיסץ, ראַגאַרדלאַס פון ווו זייַן ווייזט צו. אָ_עקסקל איז צעבראכן אויף נפס טעקע סיסטעמען , מגילה וואָס פאַרלאָזנ אויף עס פֿאַר פּערפאָרמינג לאַקינג טאַסקס וועט אַנטהאַלטן אַ ראַסע צושטאַנד. די לייזונג פֿאַר פּערפאָרמינג אַטאָמישע טעקע לאַקינג ניצן אַ לאָקקפילע איז צו שאַפֿן אַ יינציק טעקע אויף די זעלבע עפעס (למשל, ינקאָרפּערייטינג האָסטנאַמע און פּיד), נוצן לינק (2) צו מאַכן אַ לינק צו די לאָקקפילע. אויב לינק () קערט 0, די שלאָס איז מצליח. אַנדערש, נוצן סטאַט (2) אויף די יינציק טעקע צו קאָנטראָלירן אויב זייַן לינק ציילן איז געוואקסן צו 2, אין וועלכע פאַל די שלאָס איז אויך מצליח.

O_NOCTTY

אויב פּאַטנאַמע רעפערס צו אַ וואָקזאַל מיטל --- זען טטי (4) --- עס וועט נישט ווערן דער קאַנטראָולינג וואָקזאַל אַפֿילו אויב דער פּראָצעס טוט נישט האָבן איין.

O_TRUNC

אויב די טעקע שוין יגזיסץ און איז אַ רעגולער טעקע און די עפענען מאָדע אַלאַוז שרייַבן (ד"ה, איז אָ_ רדוור אָדער אָ_ווראָנלי) עס וועט זיין טראַנגקייטעד צו לענג 0. אויב די טעקע איז אַ פיפאָ אָדער וואָקזאַל מיטל טעקע, די O_TRUNC פאָן איז איגנאָרירט. אַנדערש, די ווירקונג פון O_TRUNC איז נישט געוויזן. (אויף פילע לינוקס ווערסיעס עס וועט זיין איגנאָרירט, אויף אנדערע ווערסיעס, עס וועט צוריקקומען אַ טעות.)

O_APPEND

דער טעקע איז געעפנט אין אַפּענד מאָדע. פאר יעדער שרייַבן , די טעקע טייַטל איז פּאַזישאַנד אין די סוף פון די טעקע, ווי אויב מיט לסעעק . O_APPEND קען פירן צו פארדארבן טעקעס אויף נפס טעקע סיסטעמס אויב מער ווי איין פּראָצעס אַפּענדז דאַטן צו אַ טעקע אין אַמאָל. דאָס איז ווייַל NFS טוט נישט שטיצן אַפּפּענדינג צו אַ טעקע, אַזוי דער קליענט קערן האט צו סימולירן עס, וואָס קענען ניט זיין געטאן אָן אַ ראַסע צושטאַנד.

O_NONBLOCK אָדער O_NDELAY

ווען מעגלעך, די טעקע איז געעפנט אין ניט-בלאַקינג מאָדע. ניט די עפענען אדער קיין סאַבסאַקוואַנט אַפּעריישאַנז אויף דער טעקע דעסקריפּטאָר וואָס איז אומגעקערט וועט פאַרשאַפן די פאַך פּראָצעס צו וואַרטן. פֿאַר די האַנדלינג פון פיפאָס (געהייסן פּייפּס), זען אויך פיפאָ (4). דעם מאָדע דאַרף קיין ווירקונג אויף טעקעס אנדערע ווי פיפאָס.

O_SYNC

דער טעקע איז געעפנט פֿאַר סינטשראָנאָוס איך / אָ. קיין שרייַבן s אויף די ריזאַלטינג טעקע דעסקריפּטאָר וועט פאַרשפּאַרן די פאַך פּראָצעס ביז די דאַטע איז פיזיקלי געשריבן צו די אַנדערלייינג ייַזנוואַרג. זען ווייטער אונטער, כאָטש.

O_NOFOLLOW

אויב פּאַטהנאַמע איז אַ סימבאָליש לינק, די עפענען פיילז. דאָס איז אַ פרעעבסד פאַרלענגערונג, וואָס איז צוגעגעבן צו לינוקס אין ווערסיע 2.1.126. סימבאָליש פֿאַרבינדונגען אין פריער קאַמפּאָונאַנץ פון די פּאַטהנאַמע וועט נאָך זיין נאכגעגאנגען. די כעדערז פון glibc 2.0.100 און שפּעטער אַרייַננעמען אַ דעפֿיניציע פון ​​דעם פאָן; קעראַלז איידער 2.1.126 וועט איגנאָרירן עס אויב געניצט .

O_DIRECTORY

אויב פּאַטהנאַמע איז נישט אַ Directory, פאַרשאַפן די עפענען צו פאַרלאָזן. דעם פאָן איז לינוקס-ספּעציפיש, און איז צוגעגעבן אין קערן ווערסיע 2.1.126, צו ויסמייַדן אָפּזאָג פון דינען פראבלעמען אויב אָפּענדיר (3) איז גערופן אויף אַ פיפאָ אָדער טאַשמע מיטל, אָבער זאָל נישט זיין געניצט אַרויס פון דער ימפּלאַמענטיישאַן פון אָפּענדיר .

O_DIRECT

פּרוּווט צו מינאַמייז קאַש ווירקונג פון די איך / אָ צו און פון דעם טעקע. אין אַלגעמיין דאָס וועט צעשטערן די פאָרשטעלונג, אָבער עס איז נוצלעך אין ספּעציעל סיטואַטיאָנס, אַזאַ ווי ווען אַפּלאַקיישאַנז טאָן זייער אייגן קאַטשינג. טעקע איך / אָ איז געטאן גלייַך צו / פון באַניצער פּלאַץ באַפערז. די איך / אָ איז סינטשראָנאָוס, ד"ה אין די קאַמפּלישאַן פון די לייענען (2) אָדער שרייַבן (2) סיסטעם רופן, דאַטן איז געראַנטיד צו האָבן געווען טראַנספערד. אַריבערפירן סיזעס, און די אַליינמאַנט פון באַניצער באַפער און טעקע פאָטאָ זאָל אַלע זיין מאַלטאַפּאַלז פון די לאַדזשיקאַל בלאָק גרייס פון דער טעקע סיסטעם.
דעם פאָן איז געשטיצט אויף אַ נומער פון וניקס-ווי סיסטעמען; שטיצן איז צוגעגעבן אונטער Linux אין קערן ווערסיע 2.4.10.
א סעמאַנטיקלי ענלעך צובינד פֿאַר פאַרשפּאַרן דעוויסעס איז באשאפן אין רוי (8).

O_ASYNC

גענוי אַ סיגנאַל (סיגיאָ דורך פעליקייַט, אָבער דעם קענען זיין געביטן דורך פקטנטל (2)) ווען אַרייַנשרייַב אָדער רעזולטאַט ווערט מעגלעך אויף דעם טעקע דעסקריפּטאָר. דעם שטריך איז בלויז בנימצא פֿאַר טערמינאַלס, פּסעוודאָ-טערמינאַלס און סאָקקעץ. זען פקטנטל (2) פֿאַר ווייַטער פרטים.

O_LARGEFILE

אויף 32-ביסל סיסטעמס אַז שטיצן די גרויס פילעס סיסטעם, די טעקעס וואָס וועמענס סיזעס קענען נישט זיין רעפּריזענטיד אין 31 ביץ צו עפענען.

עטלעכע פון ​​די אַפּשאַנאַל פלאַגס קענען זיין אָלטערד ניצן פנטנטל נאָך די טעקע האט שוין געעפנט.

דער אַרגומענט מאָדע באשטייט די פּערמישאַנז צו נוצן אין פאַל אַ נייַ טעקע איז באשאפן. עס איז מאַדאַפייד דורך דעם פּראָצעס ס ומאַסק אין די געוויינטלעך וועג: די פּערמישאַנז פון די באשאפן טעקע זענען (מאָדע & ~ ומאַסק) . באַמערקונג אַז דאָס מאָדע אַפּלייז בלויז צו צוקונפֿט אַקסעס צו די ניי באשאפן טעקע; דער עפענען רופן אַז קריייץ אַ לייכט בלויז טעקע זאל געזונט צוריקקומען אַ לייענען / שרייַבן טעקע דעסקריפּטאָר.

די פאלגענדע סימבאָליש קאַנסטאַנץ זענען צוגעשטעלט פֿאַר מאָדע :

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 .

RETURN VALUE

עפענען און קרעאַט צוריק די נייַ טעקע דעסקריפּטאָר, אָדער -1 אויב אַ טעות איז געפונען (אין וועלכע פאַל, ערנאָו איז שטעלן אַפּראָופּרייטלי). באַמערקונג אַז עפענען קענען עפענען מיטל ספּעציעל טעקעס, אָבער קרעאַט קענען נישט מאַכן זיי - נוצן מקנאָד (2) אַנשטאָט.

אויף נפס טעקע סיסטעמען מיט UID מאַפּינג ענייבאַלד, עפענען קען צוריקקומען אַ טעקע דעסקריפּטאָר אָבער למשל לייענען (2) ריקוועס זענען געלייקנט מיט עאַסקעס . דעם איז ווייַל דער קליענט פּערפאָרמז עפענען דורך קאָנטראָלירן די פּערמישאַנז, אָבער יו.ד. מאַפּינג איז געטאן דורך די סערווירער אויף לייענען און שרייַבן ריקוועס.

אויב די טעקע איז ניי באשאפן, די אַטימס, קטימע, מטיי פעלדער זענען באַשטימט צו דעם קראַנט צייַט, און אַזוי זענען די קטימע און מטיי פעלדער פון דער פאָטער וועגווייַזער. אַנדערש, אויב די טעקע איז מאַדאַפייד ווייַל פון די O_TRUNC פאָן, זייַן ctime און מטימע פעלדער זענען באַשטימט צו דעם קראַנט צייַט.

ערראָרס

EEXIST

pathname שוין יגזיסץ און אָ_קרעאַט און אָ_עקסקל זענען געניצט.

עיסדיר

pathname רעפערס צו אַ וועגווייַזער און דער צוטריט איז פארלאנגט ינוועסמאַנט שרייַבן (אַז איז, O_WRONLY אָדער O_RDWR איז באַשטימט).

EACCES

דער געבעטן צוטריט צו דער טעקע איז נישט ערלויבט, אָדער איינער פון די דיירעקטעריז אין פּאַטהעמע האט נישט דערלויבן זוכן (ויספירן) דערלויבעניש, אָדער דער טעקע האט נישט עקסיסטירן נאָך און שרייַבן צוטריט צו דער פאָטער וועגווייַזער איז נישט ערלויבט.

ענאַמעטאָאָלאָנג

פּאַדנאַמע איז אויך לאַנג.

ENOENT

O_CREAT איז ניט שטעלן און דער געהייסן טעקע טוט נישט עקסיסטירן. אָדער, אַ וועגווייַזער קאָמפּאָנענט אין פּאַטהנאַמע טוט נישט עקסיסטירן אָדער איז אַ דאַנגגלינג סימבאָליש לינק.

ENOTDIR

א קאָמפּאָנענט געניצט ווי אַ וועגווייַזער אין פּאַטהנאַמע איז ניט, אין פאַקט, אַ וועגווייַזער, אָדער O_DIRECTORY איז געווען ספּעסאַפייד און pathname איז ניט אַ וועגווייַזער.

ENXIO

O_NONBLOCK | O_WONLY איז באַשטימט, דער געהייסן טעקע איז אַ פיפאָ און קיין פּראָצעס האט די טעקע עפענען פֿאַר לייענען. אָדער, די טעקע איז אַ מיטל טעקע טעקע און קיין קאָראַספּאַנדינג מיטל יגזיסץ.

ENODEV

pathname רעפערס צו אַ מיטל ספּעציעל טעקע און קיין קאָראַספּאַנדינג מיטל יגזיסץ. (דאס איז אַ לינוקס קיינער באַפאַלן - אין דעם סיטואַציע ENXIO מוזן זיין אומגעקערט.)

עראָופּס

pathname רעפערס צו אַ טעקע אויף אַ לייכט בלויז פילעסיסטעם און שרייַבן צוטריט איז געבעטן.

ETXTBSY

pathname refers to an executable image which is currently being executed and write access was requested.

EFAULT

פּאַטראָן ווייזט אַרויס דיין צוטריטלעך אַדרעס פּלאַץ.

ELOOP

אויך פילע סימבאָליש פֿאַרבינדונגען זענען געפונען אין די ריסיווינג פּאַטהעמע , אָדער O_NOFOLLOW איז געווען ספּעסאַפייד אָבער pathname איז געווען אַ סימבאָליש לינק.

ענאָספּק

pathname איז געווען באשאפן אָבער די מיטל מיט pathname האט קיין פּלאַץ פֿאַר די נייַ טעקע.

ENOMEM

ניט גענוגיק קערן זכּרון איז געווען בנימצא.

EMFILE

דער פּראָצעס שוין האט די מאַקסימום נומער פון טעקעס עפענען.

ENFILE

דער שיעור פון די גאַנץ נומער פון טעקעס עפענען אויף די סיסטעם איז ריטשט.

קאָנפאָרמינג צו

SVr4, SVID, POSIX, X / OPEN, BSD 4.3 די O_NOFOLLOW און O_DIRECTORY פלאַגס זענען לינוקס- ספּעקיפיקלי. איינער קען האָבן צו באַשטימען די _GNU_SOURCE מאַקראָו צו באַקומען זייער דעפֿיניציע.

Restrictions

עס זענען פילע ינפעליסיטיעס אין די פּראָטאָקאָל אַנדערלייינג נפס, אַפעקטינג צווישן אנדערע O_SYNC און O_NDELAY .

פּאָסיקס כּולל דרייַ פאַרשידענע וועריאַנץ פון סינגקראַנייזד I / O, קאָראַספּאַנדינג די פלאַגס O_SYNC , O_DSYNC און O_RSYNC . דערווייַל (2.1.130) די זענען אַלע סאַנאַנאַמאַס אונטער לינוקס.