close (فراخوان سیستمی)

از ویکی‌پدیا، دانشنامهٔ آزاد

در بیشتر سیستم‌فایل‌ها یک برنامه می‌تواند دسترسی به یک فایل را با استفاده از فراخوان سیستمی close()‎ ببندد. اجرا این فراخوان سیستمی باعث می‌شود تا تمامی بافرها فلاش شوند، فراداده فایل بروزرسانی شود (که ممکن است حاوی نشانگر پایان فایل در داده‌ها باشد)، منابعی که به فایل تخصیص داده شده را آزاد کرده و به سیستم برمی‌گرداند (از جمله توصیف‌گر پرونده فایل مورد نظر)، و جدول سیستمی که فایل‌های در حال استفاده را نشان می‌دهد را بروزرسانی می‌کند. برخی از زبان‌های برنامه‌نویسی، ساختاری از فایل‌های بازشده توسط کتابخانه زمان اجرایشان را نگهداری می‌کنند که ممکن است وقتی برنامه به اجرای خود خاتمه می‌دهد، از بین برود. برخی از سیستم‌عامل‌ها وقتی که اجرای یک برنامه به پایان می‌رسد یا به هر دلیل خاتمه می‌یابد، به طور خودکار فراخوان سیستمی close()‎ را هم اجرا می‌کنند. برخی از سیستم‌عامل‌ها هم در تلاش برای بازآوری سیستم در حین بوقوع پیوستن یک اتفاق، فراخوان سیستمی close را صدا می‌زنند.

در کتابخانه پازیکس سی[ویرایش]

این فراخوان سیستمی در پازیکس به صورت استاندارد درآمده است:

 int close (int filedes);
 int fclose(FILE *stream);

تابع برای نشان دادن اینکه فایل با موفقیت بسته شده است، عدد 0 را برمی‌گرداند. اگر خطایی در حین بستن فایل اتفاق بیفتد، مقدار ‎-1 برگردانده خواهد شد و متغیر سراسری errno هم باید مقدار مناسب مقداردهی خواهد شد. از جمله خطاهای ممکن می‌توان به موارد زیر اشاره کرد:

EBADF

آرگومان ارسالی کی توصیف‌گر پرونده معتبر نیست.

EINTR

فراخوان سیستمی توسط یک سیگنال قطع شده است.

EIO

یک خطای I/O بوقوع پیوسته است.

منابع[ویرایش]