বাফার ফ্লাশ করার অর্থ কী?


100

আমি সি ++ শিখছি এবং আমি এমন কিছু পেয়েছি যা আমি বুঝতে পারি না:

আউটপুট বাফারগুলি পরিষ্কারভাবে বাফারটিকে লিখিতভাবে বাধ্য করতে ফ্লাশ করা যায়। ডিফল্টরূপে, পড়া cinফ্লাশ cout; coutপ্রোগ্রামটি সাধারণত শেষ হয়ে গেলে ফ্লাশও হয়।

সুতরাং বাফারটি ফ্লাশ করছে (উদাহরণস্বরূপ একটি আউটপুট বাফার): এটি কি এতে সমস্ত কিছু মুছে ফেলে বাফারকে সাফ করে দেয় বা এটিতে সমস্ত কিছু আউটপুট করে বাফারটি সাফ করে? বা বাফার ফ্লাশ করার অর্থ সম্পূর্ণ আলাদা কিছু?

উত্তর:


127

একটি ফাইল লিখতে বিবেচনা করুন। এটি একটি ব্যয়বহুল অপারেশন। যদি আপনার কোডে আপনি একবারে একটি বাইট লেখেন, তবে বাইটের প্রতিটি লেখা খুব ব্যয়বহুল হতে চলেছে। সুতরাং কর্মক্ষমতা উন্নত করার একটি সাধারণ উপায় হ'ল অস্থায়ী বাফারে আপনি যে ডেটাটি লিখছেন তা সঞ্চয় করা। যখন প্রচুর ডেটা থাকে কেবল তখনই ফাইলটিতে লিখিত বাফার থাকে। লেখাগুলি স্থগিত করে, এবং একসাথে একটি বৃহত ব্লক লিখে, পারফরম্যান্স উন্নত হয়।

এটি মনে রেখে, বাফারটিকে ফ্লাশ করা বাফার থেকে ফাইলটিতে ডেটা স্থানান্তর করার কাজ।

এটি কি এর মধ্যে সমস্ত কিছু মুছে ফেলে বাফারকে সাফ করে বা এটিতে সমস্ত কিছু আউটপুট করে বাফারটি সাফ করে?

পরেরটি।


4
ধন্যবাদ আরেকটা জিনিস. সিন পড়লে চকচকে। এই "রিডিং সিন" এর অর্থ কি ব্যবহারকারী যখন কিছু প্রবেশ করে বা যখন ব্যবহারকারীকে কিছু প্রবেশ করার অনুরোধ জানানো হয়?
মোহাম্মদ আহমেদ নাবিল

4
আপনি যখন সিন থেকে পড়তে স্ট্রিম অপারেটর ব্যবহার করেন তখন সিন রিডিং হয়। সাধারণত আপনি যখন পড়েন তখন ফ্লট কাউট করতে চান কারণ অন্যথায় প্রম্পটের আগে ইনপুট উপস্থিত হতে পারে।
ডেভিড হেফারনান

4
@ ডেভিডহেফেরানান যতদূর আমি জানি, সিনের আগে আপনার কখনই ফ্লাউট ফ্লাশ করার দরকার নেই, কারণ সিন এবং কাউট বাঁধা আছে (স্ট্রস্ট্রপ, দ্য সি ++ প্রোগ্রামিং ল্যাঙ্গুয়েজ, [io.tie])।
জোরদার

24

আপনি উত্তর উদ্ধৃত করেছেন:

আউটপুট বাফারগুলি পরিষ্কারভাবে বাফারটিকে লিখিতভাবে বাধ্য করতে ফ্লাশ করা যায়।

এটি, অন্তর্নিহিত স্ট্রিমটিতে লিখিত হওয়ার জন্য আউটপুটটি "ফ্লাশ" করার প্রয়োজন হতে পারে (যা কোনও ফাইল হতে পারে বা তালিকাভুক্ত উদাহরণগুলিতে, একটি টার্মিনাল)।

সাধারণত stdout / cout লাইন-বাফার হয়: আপনি একটি নতুন লাইন না লিখলে বা স্পষ্টভাবে বাফারটি ফ্লাশ না করা পর্যন্ত আউটপুটটি ওএস-এ প্রেরণ হয় না। সুবিধাটি হ'ল এর মতো কিছু std::cout << "Mouse moved (" << p.x << ", " << p.y << ")" << endlছয়টির পরিবর্তে অন্তর্নিহিত "ফাইল" তে কেবল একটি লেখার কারণ, যা পারফরম্যান্সের জন্য অনেক ভাল। অসুবিধাটি হ'ল কোনও কোডের মতো:

for (int i = 0; i < 5; i++) {
    std::cout << ".";
    sleep(1); // or something similar
}

std::cout << "\n";

.....একবারে আউটপুট আসবে (সঠিক sleepবাস্তবায়নের জন্য, এই প্রশ্নটি দেখুন )। এই ক্ষেত্রে, << std::flushআউটপুট প্রদর্শিত হবে তা নিশ্চিত করার জন্য আপনি একটি অতিরিক্ত চাইবেন ।

cinফ্লাশগুলি পড়া coutযাতে আপনার এটি করার জন্য সুস্পষ্ট ফ্লাশের প্রয়োজন হয় না:

std::string colour;
std::cout << "Enter your favourite colour: ";
std::cin >> colour;

(Int i = 0; i <5; i ++) {std :: cout << "।"; এর জন্য এটি করছেন ঘুম (1); } এসটিডি :: কোট << স্টাডি :: এন্ডল; ছাপে না ..... একসাথে এটি তাদের মধ্যে 1 মিলিসেকেন্ড সহ মুদ্রণ করে। আপনি ঘুমটি ব্যবহার করার সময় এটি আরও লক্ষ্য করবেন (1000)
মোহাম্মদ আহমেদ নাবিল

@ মোহামেদ আহমাদনাবিল আপনি (উইন্ডোজ)sleep()Sleep()
টিসি

4
পুরানো উত্তর, তবে কেবল মন্তব্যটি বিষয়বস্তু সম্পর্কে কম এবং উদাহরণ সম্পর্কে আরও কম। আপনি coutএকটি নেমস্পেসের সাথে যোগ্যতা অর্জন করেছেন (অর্থাত্‍ std::cout), তবে এটির জন্য এটি করেন নি endl, যার জন্য সেই যোগ্যতারও দরকার।
ভোলআরন

4
আমি আপনার উদাহরণ পছন্দ। তবে আমি ভেবেছিলাম এডল বাফারটিকে ফ্লাশ করে তবে আপনার উদাহরণে, \ n বাফারটিকে ফ্লাশ করে। আমি দ্বিধান্বিত.
নাজ

4
@ নাজ \ n বাফারটি ফ্লাশ করে না; বাফারটি কেবলমাত্র তার উদাহরণের মধ্যে প্রোগ্রামের শেষে ফ্লাশ করা হয় (বাফার সর্বদা স্বয়ংক্রিয়ভাবে সি ++ প্রোগ্রামের শেষে ফ্লাশ করা হয়)। । n সম্ভবত ফর্ম্যাট করার জন্য ব্যবহৃত হয়েছিল। এছাড়াও, আপনি ঠিক বলেছেন যে স্ট্যান্ড :: এন্ডেল বাফারকে ফ্লাশ করে (তাই স্ট্যান্ড :: ফ্লাশ করে তবে এটি স্ব-ব্যাখ্যামূলক)।
liamnickell

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.