লিনাক্স কীভাবে বাস্তব এবং অস্থানীয় (যেমন: ডিভাইস) ফাইলগুলির মধ্যে পার্থক্য করতে পারে?


28

এটি বরং নিম্ন-স্তরের প্রশ্ন এবং আমি বুঝতে পারি যে এটি জিজ্ঞাসার সবচেয়ে ভাল জায়গা নাও হতে পারে। তবে এটি অন্য যে কোনও এসই সাইটের চেয়ে বেশি উপযুক্ত বলে মনে হয়েছিল, তাই এখানে যায়।

আমি জানি যে লিনাক্স ফাইল সিস্টেমে কিছু ফাইল আসলে উপস্থিত থাকে , উদাহরণস্বরূপ: /usr/bin/bashএটি একটি যা বিদ্যমান। যাইহোক, (যতদূর আমি এটা বুঝতে হিসাবে), কিছু এছাড়াও আসলে যেমন কোন অস্তিত্ব নেই এবং আরো ভার্চুয়াল ফাইল, যেমন: /dev/sda, /proc/cpuinfo, ইত্যাদি আমার প্রশ্ন আছে (তারা দুই আছে, কিন্তু খুব ঘনিষ্ঠভাবে পৃথক প্রশ্নের হতে এর সাথে সম্পর্কিত):

  • লিনাক্স কার্নেল কীভাবে এই ফাইলগুলি বাস্তব (এবং সেজন্য এটি ডিস্ক থেকে পড়তে পারে) বা রিড কমান্ড (বা এ জাতীয়) জারি করার পরে কীভাবে কাজ করবে?
  • যদি ফাইলটি আসল না হয়: উদাহরণস্বরূপ, একটি পঠন /dev/randomএলোমেলো ডেটা ফেরত দেবে, এবং একটি পঠন /dev/nullফিরে আসবে EOF। এই ভার্চুয়াল ফাইলটি থেকে কী ডেটা পড়তে হবে (এবং তাই ভার্চুয়াল ফাইলটিতে ডেটা লেখার সময় / কী করতে হবে) কীভাবে তা কার্যকর হয় - প্রতিটি ফাইলের জন্য উপযুক্ত / পড়ার নির্দেশ কমানোর আলাদা করার জন্য পয়েন্টার সহ কিছু ধরণের মানচিত্র রয়েছে, এমনকি ভার্চুয়াল ডিরেক্টরি নিজেই জন্য? সুতরাং, জন্য একটি এন্ট্রি /dev/nullকেবল একটি ফিরে আসতে পারে EOF

1
ফাইলটি তৈরি করা হলে, কার্নেলটি তার প্রকারটি রেকর্ড করে। এর পরে নিয়মিত ডিস্ক ফাইলগুলি সিমলিংক, ব্লক ডিভাইস, অক্ষর ডিভাইস, ডিরেক্টরি, সকেট, এফআইএফও ইত্যাদি থেকে আলাদাভাবে চিকিত্সা করা হয় এটি জানা কার্নেলের কাজ।
জোনাথন লেফলার

mknod জন্য মানুষ pge দেখতে
Jasen

এটি "জিজ্ঞাসা করার মতো একটি হালকা স্যুইচটি কীভাবে জানতে পারে যে আলো চালু আছে কিনা?" লাইটটি স্যুইচ করা আছে কিনা তা সিদ্ধান্ত নেওয়ার দায়িত্বে রয়েছে লাইট সুইচ।
মনিকা

উত্তর:


25

সুতরাং এখানে মূলত দুটি ভিন্ন ধরণের জিনিস রয়েছে:

  1. সাধারণ ফাইল সিস্টেমগুলি, যা পরিচিত পদ্ধতিতে (সফট লিঙ্ক, হার্ড লিঙ্কগুলি সহ) সহ ডেটা এবং মেটাডেটা সহ ডিরেক্টরিতে ফাইলগুলি ধারণ করে। এগুলি প্রায়শই, তবে সর্বদা নয়, অবিচ্ছিন্ন স্টোরেজ করার জন্য ব্লক ডিভাইস দ্বারা ব্যাক সমর্থন করা হয় (একটি টিএমপিএফ কেবল র‌্যামে থাকে, তবে অন্য একটি সাধারণ ফাইল সিস্টেমের মতোই হয়)। এর শব্দার্থবিজ্ঞানগুলি পরিচিত; পড়ুন, লিখুন, নাম পরিবর্তন করুন এবং আরও অনেক কিছু, আপনার প্রত্যাশা অনুযায়ী সমস্ত কাজ করে work
  2. বিভিন্ন ধরণের ভার্চুয়াল ফাইল সিস্টেম। /procএবং /sysএখানে যেমন ফুস কাস্টম ফাইল সিস্টেমগুলি sshfsবা উদাহরণ রয়েছে ifuse। এগুলির মধ্যে আরও অনেক বৈচিত্র্য রয়েছে, কারণ সত্যিকার অর্থে তারা কেবল একটি শব্দার্থবিজ্ঞানযুক্ত একটি ফাইল সিস্টেমকে বোঝায় যা কিছুটা অর্থে 'রীতিনীতি'। সুতরাং, আপনি যখন কোনও ফাইলের অধীনে পড়েন, তখন আপনি /procআসলে কোনও নির্দিষ্ট ফাইলের অ্যাক্সেস করছেন না যা আগে অন্য কোনও কিছু দ্বারা সংরক্ষণ করা হয়েছিল, যেমনটি একটি সাধারণ ফাইল সিস্টেমের অধীনে। আপনি মূলত একটি কার্নেল কল করছেন, ফ্লাই-অনে ফ্লাইট তৈরি হওয়া কিছু তথ্যের জন্য অনুরোধ করছেন। এবং এই কোডটি তার পছন্দমতো কিছু করতে পারে, যেহেতু এটি কোথাও readশব্দার্থক প্রয়োগ করে implementing সুতরাং, আপনার অধীনে ফাইলগুলির সাথে অদ্ভুত আচরণ রয়েছে /procযেমন উদাহরণস্বরূপ তারা যখন থাকে না তখন প্রতিলিঙ্ক হওয়ার ভান করে

মূলটি হ'ল /devআসলে, সাধারণত, প্রথম ধরণের একটি। /devTmpfs এর মতো কিছু আধুনিক ডিস্ট্রিবিউশনে এটি স্বাভাবিক , তবে পুরানো সিস্টেমে এটি কোনও বিশেষ বৈশিষ্ট্য ছাড়াই ডিস্কে একটি সরল ডিরেক্টরি হওয়া স্বাভাবিক ছিল। মূলটি হ'ল নীচে থাকা ফাইলগুলি /devডিভাইস নোডগুলি, ফিফগুলি বা ইউনিক্স সকেটের অনুরূপ এক ধরণের বিশেষ ফাইল; একটি ডিভাইস নোডের একটি বড় এবং গৌণ সংখ্যা রয়েছে, এবং সেগুলি পড়তে বা লিখতে কার্নেল ড্রাইভারকে কল করা হয়, যেমন কোনও ফিফো পড়া বা লেখার জন্য কার্নেলটিকে পাইপটিতে আপনার আউটপুট বাফার করার জন্য কল করা হয়। এই ড্রাইভারটি যা যা করতে পারে তা করতে পারে তবে এটি সাধারণত কোনওরকমভাবে হার্ডওয়ারকে স্পর্শ করে, যেমন একটি হার্ড ডিস্ক অ্যাক্সেস করতে বা স্পিকারে শব্দ প্লে করতে।

মূল প্রশ্নের উত্তর দিতে:

  1. 'ফাইল বিদ্যমান আছে' বা না থাকায় দুটি সম্পর্কিত প্রশ্ন রয়েছে; এগুলি হ'ল ডিভাইস নোড ফাইলটি আক্ষরিক অর্থে উপস্থিত রয়েছে এবং কার্নেল কোড ব্যাক করা অর্থপূর্ণ কিনা তা whether পূর্ববর্তীটি সাধারণ ফাইল সিস্টেমে যে কোনও কিছুর মতোই সমাধান করা হয়। আধুনিক সিস্টেমগুলি udevহার্ডওয়্যার ইভেন্টগুলি দেখার জন্য এটির মতো ব্যবহার করে বা এর মতো কিছু এবং স্বয়ংক্রিয়ভাবে /devসেই অনুযায়ী ডিভাইস নোডগুলি তৈরি এবং ধ্বংস করে । তবে পুরানো সিস্টেমগুলি, বা হালকা কাস্টম বিল্ডগুলি কেবল তাদের সমস্ত ডিভাইস নোডগুলিকে অক্ষরে অক্ষরে ডিস্কে রাখতে পারে, সময়ের আগে তৈরি করা হয়েছিল। এদিকে, আপনি যখন এই ফাইলগুলি পড়েন, আপনি কার্নেল কোডে একটি কল করছেন যা প্রধান এবং গৌণ ডিভাইস নম্বর দ্বারা নির্ধারিত হয়; যদি এগুলি যুক্তিসঙ্গত না হয় (উদাহরণস্বরূপ, আপনি কোনও অস্তিত্ব নেই এমন একটি ব্লক ডিভাইস পড়ার চেষ্টা করছেন), আপনি কেবল এক ধরণের আই / ও ত্রুটি পাবেন।

  2. কোন ডিভাইসের ফাইলের জন্য পরিবর্তিত হয় তার জন্য কার্নেল কোডটি কল করতে কীভাবে এটি কাজ করে। ভার্চুয়াল ফাইল সিস্টেমগুলির জন্য /proc, তারা তাদের নিজস্ব readএবং writeফাংশনগুলি প্রয়োগ করে ; কার্নেলটি কেবল সেই কোডটি কল করে যার উপর ভিত্তি করে এটি কোন মাউন্ট পয়েন্টে রয়েছে এবং ফাইল সিস্টেমের প্রয়োগটি বাকিটির যত্ন নেয়। ডিভাইস ফাইলগুলির জন্য, এটি প্রধান এবং গৌণ ডিভাইস সংখ্যার ভিত্তিতে প্রেরণ করা হয়েছে।


সুতরাং, যদি ধরা যাক, একটি পুরানো সিস্টেমটির শক্তি টানা ছিল, ফাইলগুলি /devএখনও সেখানে থাকবে, তবে আমি অনুমান করি যে সিস্টেমটি শুরু হওয়ার পরে সেগুলি সাফ হয়ে যাবে?
জো

2
যদি কোনও পুরানো সিস্টেম (কোনও গতিশীল ডিভাইস তৈরি ব্যতীত) বন্ধ হয়ে যায়, সাধারণ বা অস্বাভাবিকভাবে, ডিভাইস নোডগুলি কোনও ফাইলের মতোই ডিস্কে থাকবে। তারপরে পরবর্তী বুটআপটি ঘটে গেলে সেগুলিও ডিস্কে থাকবে এবং আপনি এগুলি সাধারণ হিসাবে ব্যবহার করতে পারেন। এটি কেবলমাত্র আধুনিক সিস্টেমেই বিশেষ কিছু ঘটে যা ডিভাইস নোডগুলি তৈরি এবং ধ্বংস করে।
টম হান্ট

সুতরাং আরও একটি আধুনিক সিস্টেম একটি ব্যবহার না করে tmpfsগতিশীলভাবে এগুলি তাদের প্রয়োজন মতো তৈরি এবং মুছে ফেলবে, যেমন: বুটআপ এবং শাটডাউন?
জো

3
devtmpfs, /devআধুনিক লিনাক্সের ফাইল সিস্টেমটি এর মতো tmpfs, তবে সমর্থন করার জন্য কিছু পার্থক্য রয়েছে udev। ( udevবুট কম জটিল করার জন্য কার্নেলটি কিছুটা স্বয়ংক্রিয় নোড তৈরি করার আগে নিজেই তৈরি করে )) এই সমস্ত ক্ষেত্রে, ডিভাইস নোডগুলি কেবলমাত্র র‌্যামে থাকে এবং হার্ডওয়্যারগুলির প্রয়োজনীয়তার কারণে গতিশীলভাবে তৈরি হয় এবং ধ্বংস হয়। সম্ভবত আপনি udevএকটি সাধারণ অন ডিস্কেও ব্যবহার করতে পারেন /devতবে আমি এটি কখনও দেখিনি এবং এর কোনও ভাল কারণ বলে মনে হয় না।
টম হান্ট

17

/dev/sda1আমার প্রায় আপ-টু-ডেট আর্চ লিনাক্স সার্ভারে একটি ফাইল তালিকা এখানে রয়েছে :

% ls -li /dev/sda1
1294 brw-rw---- 1 root disk 8, 1 Nov  9 13:26 /dev/sda1

সুতরাং ডিরেক্টরিতে প্রবেশের /dev/জন্য sdaএকটি ইনোড নম্বর রয়েছে, 1294 It's এটি ডিস্কে একটি আসল ফাইল।

ফাইলের আকারটি সাধারণত কোথায় উপস্থিত হয় তা দেখুন। "8, 1" এর পরিবর্তে উপস্থিত হয়। এটি একটি বড় এবং গৌণ ডিভাইস নম্বর। ফাইল অনুমতিগুলিতে 'বি' নোট করুন।

ফাইলটিতে /usr/include/ext2fs/ext2_fs.hএটি (টুকরা) সি স্ট্রাক্ট রয়েছে:

/*
 * Structure of an inode on the disk
 */
struct ext2_inode {
    __u16   i_mode;     /* File mode */

এই স্ট্রাক্ট আমাদের একটি ফাইলের ইনোডের অন ডিস্ক কাঠামো দেখায়। প্রচুর আকর্ষণীয় স্টাফ সেই স্ট্রাক্টে রয়েছে; এটি একটি দীর্ঘ তাকান।

দ্য i_mode উপাদানটিতে struct ext2_inode16 বিট রয়েছে এবং এটি ব্যবহারকারীর / গোষ্ঠী / অন্যান্যদের জন্য 9 টি, পড়া / লেখার / সম্পাদনের অনুমতিগুলি এবং সেটুইড, সেটজিড এবং স্টিকি জন্য আরও 3 টি ব্যবহার করে। "প্লেইন ফাইল", "লিঙ্ক", "ডিরেক্টরি", "নামযুক্ত পাইপ", "ইউনিক্স পরিবারের সকেট", এবং "ব্লক ডিভাইস" এর মতো প্রকারের মধ্যে পার্থক্য করার জন্য এটি 4 টি বিট পেয়েছে।

লিনাক্স কার্নেলটি সাধারণ ডিরেক্টরি অনুসন্ধানের অ্যালগরিদম অনুসরণ করতে পারে, তারপরে অনুমতি এবং পতাকাগুলির উপর ভিত্তি করে সিদ্ধান্ত নিতে পারে i_mode উপাদানটির । 'বি' এর জন্য, ডিভাইস ফাইলগুলিকে ব্লক করুন, এটি প্রধান এবং গৌণ ডিভাইস সংখ্যাগুলি খুঁজে পেতে পারে এবং traditionতিহ্যগতভাবে, কয়েকটি কার্নেল ফাংশন (একটি ডিভাইস ড্রাইভার) যা ডিস্কগুলি নিয়ে কাজ করে তার জন্য পয়েন্টার সন্ধান করতে প্রধান ডিভাইস নম্বরটি ব্যবহার করে। গৌণ ডিভাইস নম্বরটি সাধারণত বলি হিসাবে ব্যবহৃত হয়, এসসিএসআই বাস ডিভাইস নম্বর, বা ইআইডিই ডিভাইস নম্বর বা এর মতো কিছু।

ফাইল ফাইলের /proc/cpuinfoধরণের ভিত্তিতে কোনও ফাইলের সাথে কীভাবে ডিল করতে হয় সে সম্পর্কে কিছু অন্যান্য সিদ্ধান্ত নেওয়া হয়। আপনি যদি এটি করেন:

% mount | grep proc 
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)

আপনি দেখতে পাচ্ছেন যে /proc"সিস্টেমের" ফাইল সিস্টেম ধরণের রয়েছে। কোনও ফাইল থেকে পড়ার /procফলে ফাইল সিস্টেমের ধরণের উপর ভিত্তি করে কার্নেলটি আলাদা কিছু ঘটায়, ঠিক তেমনি একটি রিসারফস বা ডস ফাইল সিস্টেমের মধ্যে একটি ফাইল খোলার ফলে কার্নেলটি ফাইলগুলি সনাক্ত করতে বিভিন্ন ফাংশন ব্যবহার করতে পারে এবং এর তথ্য সনাক্ত করতে পারে নথি পত্র.


আপনি কি নিশ্চিত, কেবলমাত্র "ডিস্কে আসল ফাইলগুলি" একটি ইনোড নম্বর প্রদর্শিত হয়? আমি পেয়েছি 4026531975 -r--r--r-- 1 root root 0 Nov 14 18:41 /proc/mdstatযা স্পষ্টভাবে একটি "আসল ফাইল" নয়।
guntbert

7

দিনের শেষে এগুলি ইউনিক্সের জন্য সমস্ত ফাইল, এটি বিমূর্ততার সৌন্দর্য।

কার্নেল দ্বারা ফাইলগুলি যেভাবে পরিচালনা করা হয়, এখন এটি একটি বিচ্ছিন্ন গল্প।

/ proc এবং আজকাল / দেব এবং / রান (ওরফে / ভার / রান) হ'ল র‌্যামের ভার্চুয়াল ফাইল সিস্টেম। / proc হল কার্নেল ভেরিয়েবল এবং স্ট্রাকচারের জন্য একটি ইন্টারফেস / উইন্ডোজ।

আমি লিনাক্স কার্নেল http://tldp.org/LDP/tlk/tlk.html এবং লিনাক্স ডিভাইস ড্রাইভারদের তৃতীয় সংস্করণ https://lwn.net/Kernel/LDD3/ পড়ার পরামর্শ দিচ্ছি ।

আমিও ডিজাইন এবং FreeBSD 'র অপারেটিং সিস্টেম বাস্তবায়নের আস্বাদিত http://www.amazon.com/Design-Implementation-FreeBSD-Operating-System/dp/0321968972/ref=sr_1_1

আপনার প্রশ্নের সাথে সম্পর্কিত প্রাসঙ্গিক পৃষ্ঠাটি একবার দেখুন।

http://www.tldp.org/LDP/tlk/dd/drivers.html


ধন্যবাদ, আপনি মন্তব্য করার পরে আমি প্রথম প্রশ্নটিতে কিছুটা পরিবর্তন করেছি।
জো

শেষ মন্তব্য পড়ুন দয়া করে।
রুই এফ রিবেইরো

5

@ রুইএফরিবিয়েরো এবং @ ব্রুসইডিজারের উত্তরগুলি ছাড়াও, আপনি যে পার্থক্য করেন তা হ'ল কর্নেল যে পার্থক্য করে তা নয়। আসলে, আপনার কাছে বিভিন্ন ধরণের ফাইল রয়েছে: নিয়মিত ফাইল, ডিরেক্টরি, প্রতীকী লিঙ্ক, ডিভাইস, সকেট (এবং আমি সর্বদা কয়েকটি ভুলে যাই যাতে আমি একটি সম্পূর্ণ তালিকা তৈরির চেষ্টা করব না)। ফাইলের ধরণ সম্পর্কে আপনার কাছে তথ্য থাকতে পারে ls: এটি লাইনের প্রথম অক্ষর। উদাহরণ স্বরূপ:

$ls -la /dev/sda
brw-rw---- 1 root disk 8, 0 17 nov.  08:29 /dev/sda

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

তারপরে, আপনি "আসল ফাইলগুলি" এর মতো /bin/bashএবং "ভার্চুয়াল ফাইলগুলি" এর মধ্যে অন্য একটি পার্থক্য তৈরি করেন /proc/cpuinfoতবে lsউভয়কেই নিয়মিত ফাইল হিসাবে প্রতিবেদন করুন যাতে পার্থক্য অন্য রকমের হয়:

ls -la /proc/cpuinfo /bin/bash
-rwxr-xr-x 1 root root  829792 24 août  10:58 /bin/bash
-r--r--r-- 1 root wheel      0 20 nov.  16:50 /proc/cpuinfo

যা ঘটে তা হ'ল তারা বিভিন্ন ফাইল সিস্টেমের অন্তর্ভুক্ত। নিয়মিত ডিস্ক ফাইল /procসিস্টেমে procfsথাকে /bin/bashএমন একটি সিডো-ফাইল সিস্টেমের মাউন্টিং পয়েন্ট । লিনাক্স কোনও ফাইল খুললে (ফাইল সিস্টেমের উপর নির্ভর করে এটি আলাদাভাবে করে) এটি একটি ডেটা কাঠামোকে জনপ্রিয় করে তোলেfile যা অন্যান্য বৈশিষ্ট্যগুলির মধ্যে বিভিন্ন ফাংশন পয়েন্টারের একটি কাঠামো রয়েছে যা এই ফাইলটি কীভাবে ব্যবহার করতে হবে তা বর্ণনা করে। সুতরাং এটি বিভিন্ন ধরণের ফাইলের জন্য স্বতন্ত্র আচরণ প্রয়োগ করতে পারে।

উদাহরণস্বরূপ, এগুলির দ্বারা বিজ্ঞাপন দেওয়া অপারেশনগুলি /proc/meminfo:

static int meminfo_proc_open(struct inode *inode, struct file *file)
{
    return single_open(file, meminfo_proc_show, NULL);
}

static const struct file_operations meminfo_proc_fops = {
    .open       = meminfo_proc_open,
    .read       = seq_read,
    .llseek     = seq_lseek,
    .release    = single_release,
};

আপনি যদি এর সংজ্ঞাটি meminfo_proc_openদেখেন, আপনি দেখতে পাবেন যে এই ফাংশনটি ফাংশন দ্বারা ফিরিয়ে নেওয়া তথ্যের সাথে মেমরির একটি বাফারকে জনপ্রিয় করে তোলে meminfo_proc_show, যার কাজ মেমরির ব্যবহার সম্পর্কে ডেটা সংগ্রহ করা। এই তথ্যটি তখন সাধারণভাবে পড়া যায়। প্রতিবার আপনি ফাইলটি খুললে ফাংশনটি কল meminfo_proc_openকরা হয় এবং মেমরির তথ্য সতেজ করা হয়।


3

একটি ফাইল সিস্টেমে সমস্ত ফাইল এই অর্থে "আসল" হয় যে তারা ফাইল I / O কে অনুমতি দেয়। আপনি যখন কোনও ফাইল খোলেন, কার্নেল একটি ফাইল বর্ণনাকারী তৈরি করে, যা একটি বস্তু (অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিংয়ের অর্থে) যা কোনও ফাইলের মতো কাজ করে। আপনি যদি ফাইলটি পড়েন তবে ফাইল বর্ণনাকারী তার পঠন পদ্ধতিটি কার্যকর করে, যার ফলশ্রুতিতে ফাইল সিস্টেম থেকে ফাইলটি (sysfs, ext4, nfs, ইত্যাদি) জিজ্ঞাসা করা হবে। ফাইল সিস্টেমগুলি ইউজারস্পেসে একটি অভিন্ন ইন্টারফেস উপস্থাপন করে, এবং পড়তে এবং লিখতে হ্যান্ডল করতে কী করতে হবে তা জানে। ফাইল সিস্টেমগুলি পরিবর্তে অন্যান্য স্তরগুলিকে তাদের অনুরোধগুলি পরিচালনা করতে বলে। একটি ext4 ফাইল সিস্টেম বলুন নিয়মিত ফাইলের জন্য, এটি ফাইল সিস্টেমের ডেটা স্ট্রাকচারগুলিতে (যা ডিস্ক রিডের সাথে জড়িত থাকতে পারে) লুক আপগুলি অন্তর্ভুক্ত করবে এবং অবশেষে রিড বাফারে ডেটা অনুলিপি করতে ডিস্ক (বা ক্যাশে) থেকে একটি রিড পড়বে। Sysfs বলার জন্য একটি ফাইলের জন্য, এটি বাফারে সাধারণত স্প্রিন্টফ () এর কিছু। ব্লক ডেভ নোডের জন্য, এটি ডিস্ক ড্রাইভারকে কিছু ব্লক পড়তে এবং সেগুলি বাফারে অনুলিপি করতে বলবে (প্রধান এবং অপ্রাপ্ত সংখ্যক ফাইল ড্রাইভারকে অনুরোধ করতে হবে যে ড্রাইভারটি অনুরোধ করবে)।

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