ملخص
#تتضمن
وصف
الافتح() يتم استخدام الأمر linux استدعاء النظام لتحويل اسم مسار إلى واصف ملف (عدد صحيح صغير غير سلبي للاستخدام في I / O اللاحقة كما هو الحال مع اقرأ, اكتب، وما إلى ذلك). عند نجاح المكالمة ، يكون واصف الملف الذي تم إرجاعه wil هو واصف الملف الأدنى غير مفتوح حاليًا للعملية. تنشئ هذه المكالمة ملفًا مفتوحًا جديدًا ، ولا تتم مشاركته مع أي عملية أخرى. (لكن الملفات المفتوحة المشتركة قد تنشأ عن طريقشوكة(2) استدعاء النظام.) يتم تعيين واصف الملف الجديد ليظل مفتوحا عبر وظائف exec (انظرfcntl(2)). يتم تعيين إزاحة الملف إلى بداية الملف.
المعلمة الأعلام هو واحد منO_RDONLY, O_WRONLY أوO_RDWR التي تطلب فتح الملف للقراءة فقط أو الكتابة فقط أو القراءة / الكتابة ، على التوالي ، أو د مع صفر أو أكثر من الإجراءات التالية:
O_CREAT
إذا كان الملف غير موجود ، فسيتم إنشاؤه. يتم تعيين المالك (معرف المستخدم) للملف إلى معرف المستخدم الفعال للعملية. يتم تعيين ملكية المجموعة (معرف المجموعة) إما إلى معرف المجموعة الفعال للعملية أو إلى معرف المجموعة للدليل الرئيسي (حسب نوع نظام الملفات وخيارات التحميل ، ووضع الدليل الرئيسي ، انظر ، على سبيل المثال ، التثبيت خيارات bsdgroups و sysvgroups من نظام الملفات ext2 ، كما هو موضح فيتتزايد(8)).
O_EXCL
عند استخدامها معO_CREAT، إذا كان الملف موجود بالفعل فهو خطأ وافتح سوف تفشل. في هذا السياق ، يوجد رابط رمزي ، بغض النظر عن المكان الذي يشير إليه.O_EXCL هو كسر على أنظمة الملفات NFS ، فإن البرامج التي تعتمد عليها لأداء مهام قفل تحتوي على حالة السباق. الحل لأداء تأمين الملف الذري باستخدام lockfile هو إنشاء ملف فريد على نفس fs (على سبيل المثال ، دمج اسم المضيف و pid) ، استخدم الارتباط (2) لإنشاء ارتباط إلى lockfile. إذاحلقة الوصل() إرجاع 0 ، القفل بنجاح. خلاف ذلك ، استخدم القانون الأساسي(2) على الملف الفريد للتحقق مما إذا كان عدد الروابط قد ارتفع إلى 2 ، وفي هذه الحالة يكون القفل ناجحًا أيضًا.
O_NOCTTY
إذا مسار يشير إلى جهاز المحطة الطرفية --- انظرالكتابة البعيدة(4) --- أنها لن تصبح محطة التحكم في العملية حتى لو لم يكن لديك عملية واحدة.
O_TRUNC
إذا كان الملف موجودًا بالفعل وكان ملفًا عاديًا ويسمح وضع الفتح بالكتابة (أي ، O_RDWR أو O_WRONLY) ، فسيتم اقتطاعه إلى طول 0. إذا كان الملف ملف FIFO أو الجهاز الطرفي ، فسيتم تجاهل علامة O_TRUNC. خلاف ذلك ، فإن تأثير O_TRUNC غير محدد. (في العديد من إصدارات Linux ، سيتم تجاهلها ؛ في الإصدارات الأخرى ، ستعرض خطأ).
O_APPEND
يتم فتح الملف في وضع الإلحاق. قبل كلاكتب، يتم وضع مؤشر الملف في نهاية الملف ، كما لو كان معlseek. O_APPEND قد يؤدي إلى تلف الملفات على أنظمة الملفات NFS إذا ألقت عملية أكثر من واحد البيانات إلى ملف في وقت واحد. ويرجع ذلك إلى أن NFS لا يدعم إلحاق ملف ، لذا يجب على kernel العميل محاكاته ، والتي لا يمكن إجراؤها بدون حالة سباق.
O_NONBLOCK أوعلى تأخير
عندما يكون ذلك ممكنًا ، يتم فتح الملف في وضع عدم الحظر. لاافتح ولا أي عمليات لاحقة على واصف الملف الذي يتم إرجاعه سيؤدي إلى انتظار عملية الاستدعاء. للتعامل مع FIFOs (أنابيب اسمه) ، انظر أيضاFIFO(4). لا يجب أن يكون لهذا الوضع أي تأثير على الملفات الأخرى بخلاف FIFOs.
O_SYNC
يتم فتح الملف للإدخال / الإخراج المتزامن. أياكتبs على واصف الملف الناتج سيتم حظر عملية الاستدعاء حتى يتم كتابة البيانات جسديا إلى الأجهزة الأساسية. انظر القيود أدناه ، على الرغم من.
O_NOFOLLOW
إذا مسار هو ارتباط رمزي ، ثم فشل فتح. هذا هو امتداد FreeBSD ، الذي تمت إضافته إلى Linux في الإصدار 2.1.126. لا يزال سيتم اتباع الروابط الرمزية في المكونات السابقة من اسم المسار. تتضمن الرؤوس من glibc 2.0.100 والإصدارات الأحدث تعريفًا لهذه العلامة؛ سوف اللب قبل 2.1.126 تجاهلها إذا استخدمت .
O_DIRECTORY
إذا مسار ليس دليلاً ، يتسبب في فشل فتح. هذه العلامة خاصة بـ Linux ، وتمت إضافتها في إصدار kernel 2.1.126 ، لتجنب مشاكل رفض الخدمة إذاopendir(3) يسمى على جهاز FIFO أو شريط ، ولكن لا ينبغي أن تستخدم خارج تنفيذopendir.
O_DIRECT
حاول تقليل تأثيرات ذاكرة التخزين المؤقت للإدخال / الإخراج من وإلى هذا الملف. بشكل عام سيؤدي ذلك إلى انخفاض الأداء ، ولكنه مفيد في حالات خاصة ، مثل عندما تقوم التطبيقات بالتخزين المؤقت الخاص بها. تتم عملية إدخال / إخراج الملف مباشرة من / إلى مخازن مساحة المستخدم. I / O متزامن ، أي عند الانتهاء من اقرأ(2) أواكتب(2) استدعاء النظام ، يتم ضمان البيانات التي تم نقلها. يجب أن تكون أحجام النقل ، ومحاذاة المخزن المؤقت للمستخدم وإزاحة الملف جميعها مضاعفات حجم الكتلة المنطقية لنظام الملفات.هذه العلامة مدعومة على عدد من الأنظمة المشابهة لنظام يونكس. تمت إضافة الدعم تحت Linux في إصدار kernel 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. قيمة الإرجاع افتح ويخلق إرجاع واصف الملف الجديد ، أو -1 إذا حدث خطأ (في هذه الحالة ، errno تم تعيينه بشكل مناسب). لاحظ أنافتح يمكن فتح ملفات خاصة بالجهاز ، ولكنيخلق لا يمكن إنشاؤها - استخدامmknod(2) بدلا من ذلك. على أنظمة الملفات NFS مع تمكين تعيين UID ،افتح قد ترجع واصف ملف ولكن على سبيل المثال اقرأ(2) الطلبات مرفوضةEACCES. هذا لأن العميل ينفذافتح عن طريق التحقق من الأذونات ، ولكن يتم تنفيذ تعيين UID بواسطة الخادم عند قراءة وكتابة الطلبات. إذا تم إنشاء الملف حديثًا ، فسيتم تعيين الحقول mtime و ctime و mtime على الوقت الحالي ، وكذلك حقول ctime و mtime للدليل الأساسي. وإلا ، إذا تم تعديل الملف بسبب علامة O_TRUNC ، يتم تعيين الحقول ctime و mtime الخاصة به إلى الوقت الحالي. EEXIST مسار موجود بالفعل وO_CREAT وO_EXCL استخدمت. EISDIR مسار يشير إلى دليل والوصول المطلوب للكتابة (أي ،O_WRONLY أوO_RDWR تم تعيين). EACCES لا يُسمح بالوصول المطلوب إلى الملف ، أو أحد الأدلة الموجودة فيه مسار لم تسمح بإذن البحث (تنفيذ) ، أو لم يكن الملف موجودًا حتى الآن ولا يُسمح بكتابة الوصول إلى الدليل الرئيسي. ENAMETOOLONG مسار كان طويل جدا. ENOENT لم يتم تعيين O_CREAT ولا يوجد الملف المحدد. أو ، مكون دليل في مسار غير موجود أو هو ارتباط رمزي متدلي. ENOTDIR مكون يستخدم كدليل في مسار ليس ، في الواقع ، دليل ، أوO_DIRECTORYتم تحديد و مسار لم يكن دليلا. ENXIO O_NONBLOCK | تم تعيين O_WRONLY ، الملف المسمى هو FIFO ولم يتم فتح الملف للقراءة. أو ، الملف هو ملف خاص بجهاز ولا يوجد جهاز مناظر. ENODEV مسار يشير إلى ملف خاص بالجهاز ولا يوجد جهاز مناظر. (هذا خطأ في kernel Linux - في هذه الحالة يجب إرجاع ENXIO.) EROFS مسار يشير إلى ملف على نظام ملفات للقراءة فقط وطلب الوصول للكتابة. ETXTBSY مسار يشير إلى صورة تنفيذية يتم تنفيذها حاليًا ويتم طلب الوصول للكتابة. EFAULT مسار نقاط خارج مساحة العنوان يمكن الوصول إليها. ELOOP تم اكتشاف العديد من الروابط الرمزية في الحل مسار أوO_NOFOLLOW تم تحديده ولكن مسار كان رابط رمزي. ENOSPC مسار كان من المقرر أن يتم إنشاؤه ولكن الجهاز يحتوي على مسار لا يوجد مجال للملف الجديد. ENOMEM كانت ذاكرة kernel غير كافية. EMFILE تحتوي العملية بالفعل على الحد الأقصى لعدد الملفات المفتوحة. ENFILE تم الوصول إلى الحد الأقصى لعدد الملفات المفتوحة على النظام. SVr4، SVID، POSIX، X / OPEN، BSD 4.3 TheO_NOFOLLOW وO_DIRECTORY الأعلام هي لينكس محددة. قد يكون واحد لتحديد_GNU_SOURCE ماكرو للحصول على تعريفاتها. هناك العديد من infelicities في البروتوكول الأساسي NFS ، التي تؤثر على غيرهاO_SYNC وعلى تأخير. يوفر POSIX لثلاثة أنواع مختلفة من I / O متزامنة ، المقابلة للأعلامO_SYNC , O_DSYNC و O_RSYNC. حاليا (2.1.130) كلها مترادفة في لينكس. أخطاء
التاكيد الى
قيود