সি ++ streamoffপ্রকারটি (ফাইল) স্ট্রিমের মধ্যে একটি অফসেট উপস্থাপন করতে ব্যবহার করে এবং [স্ট্রিম.টাইপস] এ নিম্নলিখিত হিসাবে সংজ্ঞায়িত করা হয়:
using streamoff = implementation-defined ;অপারেটিং সিস্টেমের সর্বাধিক সম্ভাব্য ফাইল আকার উপস্থাপনের জন্য টাইপ স্ট্রিমোফ পর্যাপ্ত আকারের স্বাক্ষরিত মৌলিক অবিচ্ছেদ্য ধরণের একের সমার্থক শব্দ। 287)
287) সাধারণত দীর্ঘ দীর্ঘ।
এটি উপলব্ধি করে কারণ এটি বড় ফাইলগুলির মধ্যে অনুসন্ধানের অনুমতি দেয় (ব্যবহারের বিপরীতে long , যা কেবল 32 বিট প্রশস্ত হতে পারে)।
[filebuf.virtual] basic_filebufএকটি ফাইলের মধ্যে অনুসন্ধানের ক্রিয়াকে নিম্নলিখিত হিসাবে সংজ্ঞায়িত করেছে :
pos_type seekoff(off_type off, ios_base::seekdir way, ios_base::openmode which = ios_base::in | ios_base::out) override;
off_typeএর সমতুল্য streamoff, দেখুন [iostreams.limits.pos]। তবে, স্ট্যান্ডার্ডটি তখন ফাংশনের প্রভাবগুলি ব্যাখ্যা করতে চলেছে। আমি একেবারে শেষ বাক্যে বিরক্ত হয়েছি, যার জন্য এই কলটি দরকার fseek:
প্রভাবসমূহ :
widthবোঝাতে দিনa_codecvt.encoding()। যদিis_open() == false, বাoff != 0 && width <= 0, তাহলে পজিশনিং অপারেশন ব্যর্থ হয়। অন্যথায়, যদিway != basic_ios::curবাoff != 0, এবং যদি শেষ অপারেশন আউটপুট ছিল, তবে আউটপুট ক্রম আপডেট করুন এবং কোনও আনশিফ্ট ক্রম লিখুন। এরপরে, নতুন অবস্থানের সন্ধান করুন: যদিwidth > 0, কল করুনfseek(file, width * off, whence), অন্যথায় কল করুনfseek(file, 0, whence)।
fseekএকটি longপরামিতি গ্রহণ করে । যদি off_typeএবং streamoffসংজ্ঞায়িত করা হয় long long(মান হিসাবে প্রস্তাবিত), এটি longকল করার সময় ডাউন রূপান্তর হতে পারে fseek(file, width * off, whence)(বাগগুলি সনাক্তকরণে সম্ভাব্য শক্তির দিকে পরিচালিত করে)। এটি streamoffপ্রথমে প্রকারটি প্রবর্তনের পুরো যুক্তিটিকে প্রশ্নবিদ্ধ করে ।
এই ইচ্ছাকৃত বা মান একটি ত্রুটি?
seekoffপ্রয়োজনীয় ব্যবহারের মতো বলে মনে হচ্ছে না fseek। বরং, (সম্ভবতঃ পরিচিত?) আচরণটি fseekকী seekoffকরছে তা বোঝাতে ব্যবহৃত হয় ।
fseekএটি প্রভাব ফেলবে যতক্ষণ না এটি একই প্রভাবের সাথে কিছু করে। তবে এর fseekচেয়ে কম LONG_MINবা তার চেয়ে বেশি কোনও অফসেটের LONG_MAXকোনও প্রভাব নেই, সুতরাং ব্যাখ্যাটি সর্বোপরি অসম্পূর্ণ, কমপক্ষে এর streamoffচেয়ে আরও প্রশস্ততর বাস্তবায়নের জন্য long।