র্যান্ডম ফাইল এক্সেস ফাংশনগুলো
সি ভাষায় ফাইলের যেকোনো লোকেশনে সরাসরি যাওয়ার জন্য নিম্নলিখিত ফাংশনগুলো ব্যবহার করা হয়:
ftell()rewind()fseek()
ftell() ফাংশন
ফাইল পয়েন্টারের বর্তমান পজিশন (বাইট অফসেট) রিটার্ন করে।
int pos = ftell(file_pointer);
ব্যবহার: ফাইলে কতটুকু ক্যারেক্টার লিখা/পড়া হয়েছে তা জানতে।
rewind() ফাংশন
ফাইল পয়েন্টারকে ফাইলের শুরুতে (অফসেট ০) নিয়ে যায়।
rewind(file_pointer);
এটি কল করার পর ftell() সবসময় 0 রিটার্ন করবে।
fseek() ফাংশন
ফাইল পয়েন্টারকে ফাইলের নির্দিষ্ট লোকেশনে সরিয়ে আনে।
fseek(file_pointer, offset, position);
প্যারামিটার
- offset: কতটুকু বাইট ফরওয়ার্ড/ব্যাকওয়ার্ড যেতে হবে। পজিটিভ = ফরওয়ার্ড, নেগেটিভ = ব্যাকওয়ার্ড।
- position (whence): রেফারেন্স পয়েন্ট। তিনটি মান হতে পারে:
SEEK_SET (0)— ফাইলের শুরুSEEK_CUR (1)— বর্তমান পজিশনSEEK_END (2)— ফাইলের শেষ
fseek() উদাহরণ
| কল | অর্থ |
|---|---|
| fseek(fp, 0, 2) | ফাইলের শেষ থেকে ০ বাইট ফরওয়ার্ড (যায়না, শেষে থাকে) |
| fseek(fp, 0, 0) | ফাইলের শুরুতে যায় |
| fseek(fp, m, 0) | শুরু থেকে m বাইট ফরওয়ার্ড |
| fseek(fp, -m, 2) | শেষ থেকে m বাইট পিছনে |
fseek() এরর কেস
fseek(fp, -m, 0)— ফাইলের শুরু থেকে পিছে যাওয়া যায়না (ইনভ্যালিড)।fseek(fp, +m, 2)— ফাইলের শেষ থেকে ফরওয়ার্ড যাওয়া যায়না (ইনভ্যালিড)।
ব্যবহারিক টিপস
- বাইনারি ফাইল মোড (
"rb","wb","rb+") এ fseek সবচেয়ে নির্ভুলভাবে কাজ করে। - টেক্সট মোডে লাইন এন্ডিং কনভারশনের কারণে অফসেট কখনও কখনও অপ্রত্যাশিত হতে পারে।