আমি কীভাবে একটি ফাইল পয়েন্টার (ফাইল * এফপি) একটি ফাইল বর্ণনাকারী (ইন্ট এফডি) তে রূপান্তর করতে পারি?


174

আমার কাছে একটি আছে FILE *, কল করে ফিরে এসেছি fopen()। এর থেকে কল করার জন্য আমার এটির থেকে একটি ফাইল বর্ণনাকারী পেতে fsync(fd)হবে। একটি ফাইল পয়েন্টার থেকে একটি ফাইল বিবরণী পেতে ফাংশন কি?


অথবা আপনি ফাইলটি ওপেন (2) দিয়ে খুলতে পারেন, এবং আপনার শুরু থেকেই একটি ফাইল বর্ণনাকারী থাকবে
এন্টোইন পেলিস

উত্তর:


214

সঠিক ফাংশন হয় int fileno(FILE *stream)। এটি পাওয়া যাবে <stdio.h>, এবং এটি একটি পসিক্স মান তবে স্ট্যান্ডার্ড সি নয়


4
কড়া কথায় বলতে গেলে, ফাংশনটি স্ট্যান্ডার্ড সি লাইব্রেরির একটি অংশ হলে কোনও শিরোনাম বা লাইব্রেরি উল্লেখ করার প্রয়োজন হবে না। তবে এটি স্ট্যান্ডার্ড নয়, এ কারণেই এটি অন্তত শিরোনামটির উল্লেখ করা বোধগম্য হতে পারে।
এএনটি

20
স্ট্যান্ডার্ড সি লাইব্রেরিতে ফাংশনগুলি অ্যাক্সেস করতে শিরোনামগুলি অন্তর্ভুক্ত করা দরকার, কমপক্ষে যদি আপনার সংকলক প্রোটোটাইপগুলি প্রত্যাশা করে (আমি সে ক্ষেত্রে আসলে স্ট্যান্ডার্ড আচরণ কী তা কখনই মনে করতে পারি না)। শিরোনাম ছাড়াই সি ফাইলের শুরুতে কোনও নাম সংজ্ঞায়িত করা হয় না।
ফিল মিলার

1
@ নভেলোক্র্যাট: আমার অর্থ এই নয় যে কোনও #includeকিছুর দরকার নেই। আমি কেবল বোঝাতে চেয়েছিলাম যে কোনও মানক ফাংশনের জন্য সঠিক শিরোনামটির নাম পাওয়া সর্বদা সহজ । অর্থাৎ উত্তরে সঠিক শিরোনামের নাম উল্লেখ করা সত্যিই সমালোচনাযোগ্য নয়।
এএনটি

9
এটি একটি ভাল উত্তর, তবে এটি লক্ষণীয় যে এটি কোনও স্ট্যান্ডার্ড সি ফাংশন নয়, এটি একটি পোস্টিক্স ফাংশন।
ইভান তেরান

6
এটি সি স্ট্যান্ডার্ডে নেই, কারণ ফাইল বর্ণনাকারীরা একটি ইউনিক্স জিনিস (লিনাক্সে এটি উন্মুক্ত (2), খোলা নয় (3))।
একটি ব্যবহারকারী নয়

42

এমনকি যদি fileno(FILE *)কোনও ফাইল বর্ণনাকারী ফিরিয়ে দিতে পারে তবে স্টডিওর বাফারকে বাইপাস না করাতে খুব সাবধান হন। যদি বাফার ডেটা থাকে (হয় পড়ুন বা ফলবিহীন রচনা), ফাইল বিবরণী থেকে পড়া / লেখার ফলে আপনাকে অপ্রত্যাশিত ফলাফল দিতে পারে।

পাশের প্রশ্নের একটির উত্তর দিতে, কোনও ফাইল বর্ণনাকারীকে কোনও ফাইলের পয়েন্টারে রূপান্তর করতে, ব্যবহার করুন fdopen(3)


1
আমি এটি বিশ্বাস করি না যে এটি বিশেষত এটি অনুসন্ধান করার জন্য লোকদের পক্ষে সহায়ক ছিল এবং এটি লিখিত হওয়ার একমাস আগে ওপির পোস্টের মন্তব্য বিভাগে এরই উত্তর দেওয়া হয়েছে। আসল তথ্যের বিপরীতে এটি আরও যুক্তিযুক্ত স্পষ্টতা।
কেভর

4
Soooooper গুরুত্বপূর্ণ মন্তব্যসমূহ উত্তর হিসাবে উত্থাপন করা প্রয়োজন। মন্তব্যগুলির একটি বিশাল শতাংশ হ'ল আপনার মতো ছদ্মবেশী, অর্থহীন রূপান্তর ... এবং এটি একটি;)
মার্ক গেরোলিমাটোস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.