اكتب () الدالة في لغة سي

Aktb Aldalt Fy Lght Sy



إدارة الملفات في البرمجة هي مهمة يجب على المبرمج إتقانها. تعد معرفة الوظائف المختلفة للفتح والقراءة والكتابة أمرًا ضروريًا لأننا نحتاج إليها دائمًا لتخزين المعلومات المخزنة في الملفات أو التخلص منها.

في مقالة Linux Hint هذه ، ستتعلم كيفية استخدام وظيفة write () لكتابة الملفات.







سنشرح كل شيء عن هذه العلامة ، وبناء الجملة ، وطريقة الاستدعاء ، ووسيطات الإدخال والإخراج ، ونوع البيانات التي تقبلها في كل حالة ، وكيفية تعريفها بشكل صحيح.



بعد ذلك ، نطبق ما تعلمناه من خلال وضع استخدام هذه الوظيفة في أمثلة عملية أعددناها لك مع مقتطفات من التعليمات البرمجية والصور ، توضح استخدام الكتابة () في لغة C.



لكي تحصل على معرفة شاملة باستخدام وظيفة write () ، أضفنا قسمًا خاصًا يصف الأخطاء الفردية التي يمكن أن تحدث عند استخدام هذه الوظيفة ، بالإضافة إلى اكتشافها وتحديدها ، بحيث يكون لديك التقنيات اللازمة لحل سريع في حالة حدوثها.





بناء جملة دالة Write () في لغة C.

int يكتب ( int فد و فارغ * بوف و size_t ن ) ؛

وصف دالة الكتابة () بلغة سي

وظيفة الكتابة () تكتب في ملف مفتوح. تكتب هذه الوظيفة محتويات المخزن المؤقت الذي يشير إليه 'buf' إلى الملف المحدد بواسطة واصفه في وسيطة الإدخال 'fd'. يجب تحديد حجم الكتلة المراد كتابتها إلى الملف في وسيطة الإدخال 'n'.

لتتمكن من الكتابة باستخدام وظيفة write () ، يجب فتح الملف باستخدام الوظيفة open () وتحديدها في سمات O_RDONLY أو O_RDWR. خلاف ذلك ، هذه الوظيفة ليس لها تأثير.



في حالة نجاح المكالمة ، تقوم بإرجاع عدد الأحرف التي تم إدخالها. في حالة حدوث خطأ أثناء الكتابة ، يتم إرجاع نتيجة تساوي -1. رمز التعريف الذي يشير إلى الخطأ يمكن استرجاعه من المتغير الشامل errno المحدد في رأس 'errno.h'.

في وقت لاحق ، ستجد قسمًا نشرح فيه كيفية اكتشاف وتحديد الأخطاء الأكثر شيوعًا في هذه الوظيفة.

يتم تعريف وظيفة write () في رأس 'unistd.h'. يتم تعريف العلامات التي تحدد السمات والوضع لفتح الملف في 'fcntl.h'. لاستخدام الدالتين open () و write () ، يجب عليك تضمين هذه الرؤوس في التعليمات البرمجية على النحو التالي:

# تضمين

# تضمين

كيف تكتب إلى ملف باستخدام الدالة Write () في لغة سي

في هذا المثال ، نكتب ملفًا نصيًا فارغًا باسم 'example.txt' أنشأناه سابقًا في دليل 'المستندات'.

الخطوة الأولى هي إدخال الرؤوس الضرورية. داخل الوظيفة الرئيسية () ، افتح الملف باستخدام الوظيفة (). للقيام بذلك ، نحتاج إلى التصريح عن العدد الصحيح 'fd' الذي يعمل بمثابة واصف الملف ، والمصفوفة المؤقتة 'buf' المكونة من 1024 حرفًا والتي تحتوي على النص الذي نريد كتابته إلى الملف. في هذا المخزن المؤقت ، نقوم بتخزين الفقرة الأولى من صفحة دليل GCC لكتابتها في ملف 'example.txt'.

بعد فتح الملف بوظيفة open () في وضع القراءة / الكتابة ، نكتب إلى الملف عن طريق استدعاء الدالة write () وتمرير واصف الملف 'fd' باعتباره وسيطة الإدخال الأولى ، ومؤشر 'buf' هو المؤشر الثاني وسيطة ، وحجم السلسلة المضمنة في المصفوفة باعتبارها الوسيطة الثالثة ، والتي نحصل عليها من خلال الدالة strlen (). هذا هو الكود لهذا المثال:

# تضمين

# تضمين

# تضمين

# تضمين

# تضمين

# تضمين

# تضمين

فارغ رئيسي ( )

{

int فد ؛

شار متعادل [ 1024 ] = 'عندما تستدعي GCC ، فإنها عادةً ما تقوم بالمعالجة المسبقة والتجميع والتجميع والربط. تتيح لك الخيارات العامة إيقاف هذه العملية في مرحلة وسيطة. على سبيل المثال ، يشير الخيار -c إلى عدم تشغيل الرابط ، ثم يتكون الناتج من إخراج ملفات الكائن بواسطة المجمع. ' ؛

فد = يفتح ( 'المستندات / example.txt' و O_RDWR ) ؛

يكتب ( فد و & متعادل و سترلين ( متعادل ) ) ؛

يغلق ( فد ) ؛

}

في الشكل التالي ، نرى تجميع وتنفيذ هذا الكود مع الملف المفتوح الذي تكتبه الوظيفة write ():

كيفية إضافة نص في نهاية ملف باستخدام الوظيفة Write () بلغة C.

عند فتح ملف بتحديد علامتي O_WRONLY أو O_RDWR ، ينتقل المؤشر إلى الموضع الأول ويبدأ الكتابة من هناك.

لإضافة نص في نهاية الملف ، يجب تحديده بواسطة عملية OR منطقية بين علامتي O_WRONLY أو O_RDWR وعلامة O_ APPEND في وسيطة إشارات الإدخال للوظيفة open () عند فتح الملف. بهذه الطريقة ، يتم وضع المؤشر في نهاية الملف وتبدأ الكتابة من هناك. أيضًا ، يمكن تغيير السمات ووضع الكتابة بمجرد فتح الملف باستخدام الوظيفة fcntl ().

في الرسم التوضيحي التالي ، يمكنك رؤية رمز يضيف نصًا في نهاية الملف الذي كتبناه في المثال السابق:

# تضمين

# تضمين

# تضمين

# تضمين

# تضمين

# تضمين

# تضمين

فارغ رئيسي ( )

{

int فد ؛

شار متعادل [ 1024 ] = تمت إضافة هذا النص. تمت إضافة هذا النص. ؛

فد = يفتح ( 'المستندات / example.txt' و O_RDWR | O_APPEND ) ؛

يكتب ( فد و & متعادل و سترلين ( متعادل ) ) ؛

يغلق ( فد ) ؛

}

الصورة التالية توضح النص المضاف. كما ترى ، باستخدام طريقة الفتح هذه ، تبدأ وظيفة write () في الكتابة في موضع آخر حرف تمت كتابته في الملف:

كيفية اكتشاف وتحديد الأخطاء التي يمكن أن تحدث عند استخدام وظيفة Write () في لغة C.

يمكن أن يؤدي استخدام write () إلى العديد من الأخطاء. عندما يحدث هذا ، ترجع هذه الدالة نتيجة تساوي -1.

أسهل طريقة لتحديد ما إذا كان خطأ ما هو استخدام شرط 'if' حيث يكون الشرط هو القيمة المرجعة -1. الآن ، دعنا نرى كيف يمكنك استخدام هذه الطريقة لتحديد ما إذا كان قد حدث خطأ:

int ن ؛

ن = يكتب ( فد و & متعادل و سترلين ( متعادل ) ) ؛

لو ( ن == - 1 ) {

printf ( 'حدث خطأ أثناء محاولة كتابة الملف.' ) ؛

}

إذا عادت الدالة write () بخطأ ، فإنها تنتقل إلى عبارة 'if' وتطبع الرسالة ، ' حدث خطأ أثناء محاولة كتابة الملف '.

عند حدوث خطأ ، يتم تخزين رمز رقمي تلقائيًا في المتغير الشامل errno والذي تم تحديده في العنوان 'errno.h'. يمكن استخدام هذا الرمز لتحديد الخطأ الذي حدث.

فيما يلي مقتطف يحتوي على الأخطاء التي يمكن أن تولدها الوظيفة write () والتي تم تحديدها في العنوان 'errno.h' ، إلى جانب وصف موجز لكل خطأ وقيمة العدد الصحيح المرتبطة به:

تعريف القيمة في errno خطأ
EAGAIN أحد عشر حاول ثانية.
EBADF 9 رقم الملف غير صحيح.
EDESTADDRREQ 89 عنوان الوجهة مطلوب.
إيدكوت 122 تم تجاوز الحصة.
التعليم 14 عنوان غير صحيح.
EFBIG 27 ملف كبير جدا.
EINTR 4 تمت مقاطعة مكالمة النظام.
اختيار واحد 22 سيطة غير صالحة.
EIO 5 خطأ في الإدخال / الإخراج.
اينوسك 28 لم يتبقى مساحة في الجهاز.
العلوي 1 العملية غير مسموح بها.

أسهل طريقة لتحديد الخطأ هي فتح مفتاح حيث يكون متغير errno هو حالة الانتقال وكل حالة عبارة عن تعريف للخطأ.

بعد ذلك ، دعونا نلقي نظرة على مثال نحاول فيه إدخال واصف بعلامة سلبية ، مما يؤدي إلى حدوث خطأ. لتحديد الخطأ ، نستخدم شرط 'if' الذي رأيناه في المقتطف السابق. لتحديده ، نفتح مفتاحًا به ثلاثة أخطاء شائعة يمكن أن تنتجها هذه الوظيفة.

# تضمين

# تضمين

# تضمين

# تضمين

# تضمين

# تضمين

# تضمين

فارغ رئيسي ( )

{

int فد ؛

int ن ؛

شار متعادل [ 1024 ] = 'مرحبا بالعالم' ؛

فد = يفتح ( 'المستندات / example.txt' و O_RDWR ) ؛

ن = يكتب ( - 2 و & متعادل و سترلين ( متعادل ) ) ؛

لو ( ن == - 1 ) {

يُحوّل ( يخطئ ) {

قضية EBADF : {

printf ( 'رقم ملف تالف. الخطأ:٪ i ' و يخطئ ) ؛

استراحة ؛ }

قضية اختيار واحد : {

printf ( 'وسيطة غير صالحة. الخطأ:٪ i ' و يخطئ ) ؛

استراحة ؛ }

قضية EIO : {

printf ( 'خطأ I / O. خطأ:٪ i ' و يخطئ ) ؛

استراحة ؛ }

}

}

}

كما نرى في الشكل التالي ، ترجع الدالة write () خطأً عند تمرير واصف غير صالح كوسيطة إدخال. يتم استخدام القيمة التي يتم استردادها من متغير errno كشرط انتقال يسمح لنا بتحديد الخطأ عندما ندخل في حالة EBADF.

خاتمة

في مقالة Linux Hint هذه ، أوضحنا لك كيفية استخدام وظيفة write () للكتابة إلى الملفات. لقد أظهرنا لك التركيب والوصف النظري لهذه الوظيفة. كما أوضحنا أيضًا طرق اكتشاف الأخطاء وتحديدها حتى تتوفر لديك الأدوات والتقنيات اللازمة لحل هذه المشكلات بسرعة.

لمساعدتك في معرفة كيفية عمل write () ، قمنا بتنفيذ استخدام هذه الوظيفة في أمثلة عملية مع الرموز والصور التي توضح استخدام هذه الوظيفة ووظائف معالجة الملفات الأخرى.

لقد أوضحنا لك أيضًا كيفية تحديد وضع فتح الملف لإدراج نص في بداية الملف أو في نهايته ، وما هي الوظائف المتاحة لتغيير هذه السمات.