টিটিওয়াই হ'ল এমন ফাইল যা আপনি অন্যগুলির মতো ব্যবহার করতে পারেন। আপনি এগুলিকে আপনার ভাষার স্ট্যান্ডার্ড ফাইল খোলার সরঞ্জামগুলি দিয়ে খুলতে পারেন এবং সেগুলি থেকে পড়তে বা লিখতে পারেন। তাদের কিছু বিশেষ আচরণ রয়েছে যা "সাধারণ" ফাইলগুলির চেয়ে আলাদা তবে মূল বিষয়গুলি একই the আমি শেষে কিছু বিশেষ কেস কভার করব, তবে প্রথমে, একটি পরীক্ষা।
একটি নিয়মিত টার্মিনাল থেকে সরাসরি করা যায় এমন একটি আকর্ষণীয় কাজ। চালান tty
এবং এটি একটি লাইন প্রিন্ট করবে:
/dev/pts/2
আপনার টার্মিনালটি সেই টিটিওয়াই ডিভাইসটিতে চলছে That's আপনি সেই টার্মিনালটিতে কিছু লিখতে পারেন:
$ echo Hello > /dev/pts/2
Hello
$
আপনি এটি থেকে পড়তে পারেন:
$ read X < /dev/pts/2
hello
$ echo $X
hello
$
( read X
sh এর "স্ট্যান্ডার্ড ইনপুট থেকে ভেরিয়েবল এক্স-তে একটি লাইন পড়ুন"; <টি হ'ল রিড কমান্ডের জন্য স্ট্যান্ডার্ড ইনপুট হিসাবে / dev / pts / 2 ব্যবহার করা; প্রথম "হ্যালো" আমি টাইপ করেছি এবং দ্বিতীয়টি মুদ্রিত হয়েছিল) ।
আপনি যদি অন্য শেলটি খোলেন, ব্যবহার করে বলুন screen
বা xterm
, echo spooky > /dev/pts/2
আপনার মূল টার্মিনালে টেক্সটটি প্রদর্শিত হওয়ার জন্য আপনি সেই শেলটি চালিয়ে চালাতে পারেন এবং অন্যান্য কমান্ডের ক্ষেত্রেও এটি একই। এই সমস্ত কিছুই কেবল আপনার শেল এটি কোনও টিটিওয়াই না জেনে কোনও ফাইল খোলার।
এখানে একটি খুব সাধারণ সি প্রোগ্রাম রয়েছে যা আপনি যা চেয়েছিলেন ঠিক তেমন করে এবং / dev / pts / 3 এ একটি একক অক্ষর লেখেন, তারপরে এটি থেকে একটি একক বাইট পড়ে:
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
int main() {
char byte;
int fd = open("/dev/pts/3", O_RDWR);
write(fd, "X", 1);
ssize_t size = read(fd, &byte, 1);
printf("Read byte %c\n", byte);
return 0;
}
একটি শেল বা টার্মিনাল এমুলেটরের সাথে সংযুক্ত একটি আসল টিটিওয়াই ডিভাইসের সেখানে আকর্ষণীয় আচরণ হবে তবে আপনাকে কিছুটা ফিরে পাওয়া উচিত।
একটি টার্মিনাল অ্যাক্সেস করতে আপনার এটি ব্যবহারের অনুমতি থাকতে হবে। এগুলি হ'ল যে স্ট্যান্ডার্ড ফাইল অনুমতিগুলি আপনি দেখেন ls -l
এবং সেটির সাথে সেট করেন chmod
: ফাইলটি খোলার জন্য এবং এটি পড়ার জন্য আপনার পড়ার অনুমতি প্রয়োজন এবং এতে লেখার অনুমতি লিখতে হবে। আপনার টার্মিনালটি টিটিওয়াইগুলি আপনার নিজের মালিকানাধীন হবে তবে অন্য কোনও ব্যবহারকারীর টিটিওয়াই করবে না এবং ইউএসবি ডিভাইসের জন্য টিটিওয়াই আপনার কনফিগারেশনের উপর নির্ভর করে হতে পারে বা নাও পারে or আপনি অনুমতিগুলি বরাবরের মতো একইভাবে পরিবর্তন করতে পারেন।
এটির সাথে কাজ করার জন্য কোনও প্রোগ্রাম লেখার ক্ষেত্রে আপনার খুব বেশি বিশেষ করার দরকার নেই। আপনি উদাহরণটিতে দেখতে পাচ্ছেন যে আপনার প্রয়োজন নেই এমন একটি জিনিস প্রতিবার আপনার ফাইলটি অন্য প্রান্তে পড়ার জন্য ফাইলটি বন্ধ করা হয়: টিটিওয়াই ফাইলগুলি পাইপলাইনের মতো কাজ করে, কেবলমাত্র উভয় দিকের তথ্য প্রবেশ করেই। আমি যখন টিটিওয়াইয়ের কাছে পাঠ্যটি লিখেছিলাম তা অবিলম্বে উপস্থিত হয়েছিল এবং আমি যখন এটি থেকে পড়েছি তখনই আমার জন্য অপেক্ষা করার কিছু ছিল না। এটি কোনও নিয়মিত ফাইলটিতে লেখার মতো নয় যেখানে ডেটা ডিস্কে সংরক্ষণ করা হয় - এটি অবিলম্বে অন্যদিকে চলে যায়, বা কেউ এটি না পড়ে মেমোরিতে সঞ্চয় করে।
আপনি নির্বাচিত ফাংশনটি ব্যবহার করতে চাইতে পারেন যাতে আপনি ডিভাইসটির কিছু বলার অপেক্ষা রাখার সময় আপনি অন্যান্য জিনিসগুলি করতে পারেন, তবে আপনি যদি কেবল ডেটা আসার জন্য অপেক্ষা করতে খুশি হন তবে আপনি কেবল ব্লকিং রিড ব্যবহার করতে পারেন এবং ওএসকে করতে দিন উত্তোলন
একটি বিষয় মনে রাখবেন যে কার্নেলের মধ্যে সীমিত বাফার আকার থাকতে পারে এবং আপনি যদি একবারে প্রচুর ডেটা লিখেন তবে আপনি কোনও অর্থ ছাড়াই অবরুদ্ধ হতে পারেন। যদি তাই সম্ভবত একটি সমস্যা হতে, ব্যবহার অ ব্লক আই সঙ্গে open("/dev/...", O_RDWR | O_NONBLOCK)
। নীতিটি উভয় উপায়ে একই হবে।