মধ্যে
./binary < file
binary
স্ট্যান্ডিন ফাইলটি কেবল পঠন মোডে খোলা। নোট করুন যে bash
ফাইলটি মোটেও পড়েন না, এটি কেবল প্রক্রিয়াটি চালায় এমন ফাইলের বর্ণনাকারী 0 (স্টিডিন) এ পড়ার জন্য এটি খুলবে binary
।
ইন:
./binary << EOF
test
EOF
শেলের উপর নির্ভর করে binary
স্ট্যান্ডিন হ'ল একটি মুছে ফেলা অস্থায়ী ফাইল (এটিএন্ডটি কেএসএস, জেডএস, বাশ ...) থাকবে যা test\n
শেলের দ্বারা রাখা আছে বা পাইপের রিডিং শেষে ( dash
, yash
; এবং শেলটি test\n
সমান্তরালে লিখেছে) পাইপের অন্য প্রান্তে)। আপনার ক্ষেত্রে, আপনি যদি ব্যবহার করছেন bash
তবে এটি একটি অস্থায়ী ফাইল হবে।
ইন:
cat file | ./binary
শেলের উপর নির্ভর করে binary
স্টিডিনটি হয় পাইপের পড়ার শেষ প্রান্ত বা সকেট জুটির এক প্রান্ত যেখানে লেখার দিকটি বন্ধ হয়ে গেছে (ksh93) এবং অন্য প্রান্তে cat
লিখিত লিখন রয়েছে file
।
যখন স্টিডিন একটি নিয়মিত ফাইল হয় (অস্থায়ী বা না), এটি সন্ধানযোগ্য। binary
শুরুর দিকে বা শেষ দিকে যেতে পারে, রিওয়াইন্ড ইত্যাদি হতে পারে এটি এটিকে ioctl()s
এমএমএপ করতে পারে, কিছু এফআইএমএপি / এফআইবিএম্যাপের মতো করে (যদি এর <>
পরিবর্তে ব্যবহার করা হয় তবে <
এটি এতে ছিদ্র / ঘুষি কাটাতে পারে ইত্যাদি)।
অন্যদিকে পাইপ এবং সকেট জোড় একটি আন্ত-প্রক্রিয়া যোগাযোগের মাধ্যম, ডেটা আইংয়ের binary
পাশাপাশি খুব বেশি কিছু করতে পারে না read
(যদিও কিছু পাইপ-নির্দিষ্ট ioctl()
এর মতো কিছু অপারেশন রয়েছে যা এটি তাদের উপর প্রয়োগ করতে পারে এবং নিয়মিত ফাইলগুলিতে নয়) ।
সময়ের সর্বাধিক, তখন তা অনুপস্থিত ক্ষমতা নেই seek
যে ব্যর্থ অ্যাপ্লিকেশন ঘটায় / যখন পাইপ সঙ্গে কাজ অভিযোগ, কিন্তু এটা অন্যান্য সিস্টেম কল নিয়মিত ফাইল বৈধ কিন্তু ফাইল বিভিন্ন ধরনের এ নেই কোন কিছু হতে পারে (যেমন mmap()
, ftruncate()
, fallocate()
) । লিনাক্সে, আপনি /dev/stdin
যখন fd 0 টি পাইপ বা নিয়মিত ফাইলের সাথে খুলেন তখন আচরণের ক্ষেত্রেও বড় পার্থক্য রয়েছে ।
অনেক কমান্ড সেখানে আউট যে শুধুমাত্র সাথে মোকাবিলা করতে পারে seekable ফাইল, কিন্তু যখন সেই ক্ষেত্রে, পুরোপুরি অন্য ফাইলের জন্য তাদের stdin খোলার নয়।
$ unzip -l file.zip
Archive: file.zip
Length Date Time Name
--------- ---------- ----- ----
11 2016-12-21 14:43 file
--------- -------
11 1 file
$ unzip -l <(cat file.zip)
# more or less the same as cat file.zip | unzip -l /dev/stdin
Archive: /proc/self/fd/11
End-of-central-directory signature not found. Either this file is not
a zipfile, or it constitutes one disk of a multi-part archive. In the
latter case the central directory and zipfile comment will be found on
the last disk(s) of this archive.
unzip: cannot find zipfile directory in one of /proc/self/fd/11 or
/proc/self/fd/11.zip, and cannot find /proc/self/fd/11.ZIP, period.
unzip
ফাইলের শেষে সঞ্চিত সূচকটি পড়তে হবে এবং সংরক্ষণাগার সদস্যদের পড়ার জন্য ফাইলের মধ্যে অনুসন্ধান করতে হবে। তবে এখানে, ফাইলটি (প্রথম ক্ষেত্রে নিয়মিত, দ্বিতীয়টিতে পাইপ) একটি পাথ আর্গুমেন্ট হিসাবে দেওয়া হয় unzip
এবং unzip
এটি প্যারেন্টের দ্বারা ইতিমধ্যে খোলা একটি fd উত্তরাধিকারী না হয়ে নিজেই খোলে (সাধারণত 0 এর বাইরে অন্য কোনও এফডি তে)। এটি এর স্টিন থেকে জিপ ফাইলগুলি পড়ে না। stdin বেশিরভাগ ব্যবহারকারীর মিথস্ক্রিয়া জন্য ব্যবহৃত হয়।
যদি আপনি binary
টার্মিনাল এমুলেটরটিতে চলমান একটি ইন্টারেক্টিভ শেলের প্রম্পটে পুনর্নির্দেশ ছাড়াই এটি চালান , তবে binary
এর স্টিডিনটি তার পিতামাতার কাছ থেকে উত্তরাধিকার সূত্রে প্রাপ্ত হবে, যা নিজেই এটি তার পিতামাতার কাছ থেকে উত্তরাধিকার সূত্রে টার্মিনাল এমুলেটর থেকে প্রাপ্ত হবে এবং একটি হবে pty ডিভাইস রিড + রাইটিং মোডে খোলা থাকে (এরকম কিছু /dev/pts/n
)।
এই ডিভাইসগুলিও অনুসন্ধানযোগ্য নয়। সুতরাং, যদি binary
টার্মিনাল থেকে ইনপুট নেওয়ার সময় ঠিকঠাক কাজ করা হয়, সম্ভবত সমস্যাটি সন্ধানের ক্ষেত্রে নয়।
যদি 14 টি বোঝানো হয় তবে এটি ভুল (সিস্টেম কলের মাধ্যমে একটি ত্রুটি কোড সেট করা), তবে বেশিরভাগ সিস্টেমে সেটি EFAULT
( খারাপ ঠিকানা ) হবে। read()
সিস্টেম কল যে ত্রুটি ব্যর্থ একটি মেমরি অ্যাড্রেস যে লিখনযোগ্য নয় মধ্যে পড়ার জন্য অনুরোধ করবে। এটি এফডি পয়েন্ট থেকে কোনও পাইপ বা নিয়মিত ফাইলের তথ্য পড়তে পারে এবং এটি একটি বাগ 1 নির্দেশ করে কিনা তা থেকে স্বাধীন হবে ।
binary
সম্ভবত তার স্টিডিনে (ফাইলটি) খোলা ফাইলের ধরণটি নির্ধারণ করে fstat()
এবং কোনও বাগডে চালিত হয় যখন এটি কোনও নিয়মিত ফাইল বা টিটিআই ডিভাইস নয়।
অ্যাপ্লিকেশন সম্পর্কে আরও না জেনে বলা শক্ত। নীচে চলমান strace
(অথবা truss
/ tusc
আপনার সিস্টেমে সমতুল্য) সাহায্য করতে পারে আমাদের দেখতে সিস্টেম কল কি যদি থাকে যে এখানে ব্যর্থ হচ্ছে।
1 আপনার প্রশ্নের মন্তব্যে ম্যাথু ইফের দ্বারা কল্পনা করা দৃশ্যটি এখানে অনেক প্রশংসনীয় বলে মনে হচ্ছে। তাকে উদ্ধৃত করে:
আমার সন্দেহ হয় যে এটি ফাইলের শেষের দিকে তথ্যটি পড়ার জন্য বাফার আকার পেতে চাইছে, এটি চেষ্টা করে যা কাজ করে না এবং এটি একটি নেতিবাচক আকার বরাদ্দ করার চেষ্টা করে (কোনও খারাপ মালেক পরিচালনা করে না) খারাপভাবে পরিচালনা করে। বাফার প্রদত্ত কোন ত্রুটিগুলি পড়ার জন্য বাফারটি পাস করা বৈধ নয়।