تسهیلات ورودی و خروجی I/O در زبان ++C

تسهیلات ورودی و خروجی I/O در زبان ++C
کتابخانه های استاندارد C++ مجموعه گسترده ای از قابلیتهای ورودی و خروجی را تدارک میبیند. در این پست بسیاری از این قابلیتها را مورد بحث قرار خواهیم داد.
اغلب امکاناتی که در اینجا بررسی میشوند، ویژگی شیءگرا دارند. باید سعی کنید با پیاده سازی آنها آشنایی پیدا کنید. سبک ورودی و خروجی در زبان سی پلاس پلاس موجب بهره برداری از سایر ویژگی ها مثل مرجع ها، توابع همنام و تعریف مجدد عملگرهای میشود.
اعمال I/O در c++ نسبت به نوع حساس اند. اگر یک تابع I/O طوری تعریف شده باشد که بر روی نوع خاصی عمل کند، آن تابع بطور خودکار برای پردازش آن نوع فراخوانی میشود. اگر بین نوع داده واقعی و تابع پردازش کننده آن نوع داده، سازگاری وجود نداشته باشد، کامپایلر خطایی را اعلان میکند.
جریان ها
I/O در C++ بر روی جریانی از بایتها صورت میگیرد. جریان مجموعه ای از بایتهاست. در اعمال ورودی بایتها از یک دستگاه (مثل صفحه کلید، درایو دیسک و اتصال شبکه) به حافظه اصلی جریان می یابد. در اعمال خروجی بایتها از حافظه اصلی به یک دستگاه (مثل صفحه نمایش، چاپگر، درایو دیسک و اتصال شبکه) جریان می یابد.
کار I/O سیستم، انتقال بایتها از دستگاه به حافظه و برعکس است. این انتقال اغلب شامل حرکات مکانیکی مثل چرخش دیسک یا نوار، یا تایپ از طریق صفحه کلید است. زمانی که برای این کارها صرف میشود در مقایسه با زمانی که پردازنده برای پردازش داده ها صرف میکند بسیار زیاد است. بنابراین اعمال I/O باید با کارایی خوبی انجام شوند.
C++ هم قابلیتهای I/O "سطح پایین" و هم "سطح بالا" را تدارک میبیند. I/O "سطح پایین" معمولا مشخص میکند که تعدادی از بایت ها باید از دستگاه حافظه یا بعکس منتقل شوند. در این انتقالها، هر بایت، بطور جداگانه در نظر خواهد بود. این قابلیتهای سطح پایین دارای سرعت زیاد و حجم انتقال زیاد است، ولی معمولا برنامه نویان نمیتوانند به راحتی با آنها کار کنند.
برنامه نویسان معمولا ترجیح میدهند با I/O سطح بالا استفاده کنند. در این روش بایتها، گروه هایی با معنی مثل مقادیر صحیح، عشاری، کاراکتر، رشته ها و انواع جدید را به وجود می آورند. این قابلیتها که به نوع داده ها توجه دارند، برای اغلب اعمال I/O، به جز پردازش فایلهایی با حجم زیاد، مفید واقع میشوند.
فایل iostream
کتابخانه iostream در زبان C++ صدها قابلیت I/O را تدارک میبیند. چندیدن فایل سرآیند حاوی بخش هایی از واسط کتابخانه اند. اغلب برنامه های C++ از فایل iostream.h استفاده میکنند که حاوی اطلاعات اساسی راجع به تمام عملیات ورودی و خروجی جریان است. این فایل حاوی اشیای cin، cout، cerr و clog است که معادل جریان ورودی استاندارد، جریان خروجی استاندارد، جریان خطای استاندارد بافر نشده، و جریان خطای بافر شده است. هم i/o فرمت بندی شده و هم بدون فرمت (سطح بالا و پایین) قابل استفاده اند.
فایل حاوی اطلاعات مفیدی برای اعمال I/O فرمت بندی شده و بدون فرمت است. فایل < fstream.h > حاوی اطلاعات مهمی برای عملیات پردازش فایلها است.
کلاسها و اشیای جریان C++
کتابخانه iostream حاوی کلاسهای بسیاری است که اعمال I/O را انجام میدهند. کلاس istream اعمال ورودی جریان را پشتیبانی میکند و کلاس ostream اعمال خروجی را پشتیبانی میکند. کلاس iostream اعمال جریان ورودی/ خروجی را پشتیبانی میکند.
کلاسهای istream و ostream با یک مرحله وراثت از کلاس پایه ios مشتق شده اند. و کلاس iostream با چند مرحله وراثت از این دو کلاس مشتق شده است.
تعریف مجدد عملگرها، روش مناسبی برای اعمال ورودی/ خروجی است. عملگر شیفت به چپ (>>) برای خروجی جریان مجددا تعریف شده است و عملگر درج در جریان نام دارد. عملگر شیفت به راست (<<) برای ورودی جریان مجددا تعریف شده و عملگر استخراج جریان نام دارد. این عملگرها با اشیای جریان استاندارد cin، cout، cerr و clog به کار میروند.
ورودی / خروجی فرمت بندی شده
در سیستم I/O زبان C++ اعمال I/O فرمت بندی را میتوان انجام داد. بعنوان مثال میتوانید طول فیلد، مبنای عدد، یا تعداد ارقام اعشار بعد از نقطه اعشار را تعیین کنید. دو روش مرتبط به هم و در عین حال متفاوت برای فرمت بندی داده ها وجود دارد. در روش اول میتوانید مستقیما به اعضای کلاس ios دسترسی داشته باشید. برای این کار میتوانید به نشانگرهای وضعیت فرمت که در کلاس ios تعریف شده اند دستیابی داشته باشید یا توابع عضو ios را فراخوانی کنید. در روش دوم میتوانید زا توابع خاصی به نام دستکاری کننده ها استفاده کنید. اینها میتوانند به عنوان بخشی از عبارت I/O منظور شوند.