C ভাষায় Sleep() ফাংশন

C Bhasaya Sleep Phansana



যখন আমরা এমন প্রোগ্রামগুলি বিকাশ করি যার জন্য ব্যবহারকারীর মিথস্ক্রিয়া প্রয়োজন, তখন এমন কিছু ক্ষেত্রে রয়েছে যেখানে সিস্টেমের সময়গুলি সামঞ্জস্য করা প্রয়োজন যাতে অ্যাপ্লিকেশনটি পাঠযোগ্য এবং ব্যবহার করা সহজ হয়।

উদাহরণস্বরূপ, যদি আমরা একটি কনসোল অ্যাপ্লিকেশন তৈরি করি যেখানে আমাদের ব্যবহারকারীকে সেই কাজগুলি সম্পর্কে অবহিত করতে হবে যা ক্রমানুসারে সম্পাদিত হবে, তথ্য বার্তাগুলি একটি যুক্তিসঙ্গত সময়ের জন্য টিকে থাকা উচিত যাতে ব্যবহারকারীর কাছে সেগুলি পরিষ্কার করার আগে পড়ার সময় থাকে এবং প্রোগ্রামটি পরবর্তী কমান্ডে চলে যায়।

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








সি ল্যাঙ্গুয়েজে স্লিপ() ফাংশনের সিনট্যাক্স



স্বাক্ষরবিহীন int ঘুম ( স্বাক্ষরবিহীন int সেকেন্ড )

সি ল্যাঙ্গুয়েজে স্লিপ() ফাংশনের বর্ণনা

sleep() ফাংশন প্রক্রিয়া বা থ্রেডকে সেকেন্ডে সময়ের জন্য ঘুমের জন্য রাখে যা 'সেকেন্ড' ইনপুট আর্গুমেন্টে নির্দিষ্ট করা হয় যা একটি স্বাক্ষরবিহীন পূর্ণসংখ্যা। একবার স্লিপ() ফাংশনটি কল করা হলে, কলিং প্রক্রিয়াটি সময় শেষ না হওয়া পর্যন্ত বা একটি সংকেত না পাওয়া পর্যন্ত ঘুমায়।



এই ফাংশনটি প্রায়শই রিয়েল-টাইম প্রসেস সম্পাদনে 1 সেকেন্ডের বেশি দীর্ঘ বিলম্ব কার্যকর করতে ব্যবহৃত হয়। 1 সেকেন্ডের কম বিলম্বের জন্য, POSIX মাইক্রোসেকেন্ড রেজোলিউশন ফাংশন প্রদান করে, usleep(), যা স্লিপ() হিসাবে একই পদ্ধতি কল ব্যবহার করে। 1 মাইক্রোসেকেন্ডের কম বিলম্বের জন্য, 1 ন্যানোসেকেন্ডের রেজোলিউশনের সাথে nanosleep() ফাংশনও রয়েছে, কিন্তু একটি ভিন্ন কল পদ্ধতির সাথে যেখানে এটি বিলম্বের সময় সেট করতে ইনপুট আর্গুমেন্ট হিসাবে 'timespec' কাঠামো ব্যবহার করে।





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

স্লিপ() ফাংশন 'unistd.h' হেডারে সংজ্ঞায়িত করা হয়েছে। এটি ব্যবহার করার জন্য, আমাদের নিম্নলিখিত কোডে এই ফাইলটি অন্তর্ভুক্ত করতে হবে:



#include

কিভাবে Sleep() ফাংশন দিয়ে একটি প্রক্রিয়ায় বিলম্বের পরিচয় দিতে হয়

এই উদাহরণে, আমরা একটি টাইমার তৈরি করি যা একটি অসীম লুপ নিয়ে গঠিত যেখানে আমরা কমান্ড কনসোলে 'বিগত সময়' বার্তাটি প্রিন্ট করি, তারপরে প্রক্রিয়াটির অতিবাহিত সেকেন্ডগুলি অনুসরণ করি৷ স্লিপ() ফাংশন দ্বারা সৃষ্ট বিলম্বের কারণে এই লুপগুলির প্রতিটি প্রতি 2 সেকেন্ডে পুনরাবৃত্তি হয়।

এটি করার জন্য, আমরা '.c' এক্সটেনশন সহ একটি খালি ফাইল নিই এবং এতে 'stdio.h' এবং 'unistd.h' শিরোনাম যোগ করি। তারপর, আমরা একটি খালি main() ফাংশন খুলি এবং এতে int-এর পরিবর্তনশীল সেকেন্ড সংজ্ঞায়িত করি যা আমরা অতিবাহিত সময়ের জন্য কাউন্টার হিসাবে ব্যবহার করব।

একবার শিরোনাম সন্নিবেশ করানো হয় এবং ভেরিয়েবল ঘোষণা করা হয়, আমরা একটি অসীম লুপ খুলি এবং বার্তা এবং সময়ের মান প্রদর্শন করতে এতে printf() ফাংশন ব্যবহার করি। পরের লাইনে, আমরা টাইম ভেরিয়েবল 2 দ্বারা বৃদ্ধি করি এবং তারপর ইনপুট আর্গুমেন্ট হিসাবে 2 এর মান সহ sleep() ফাংশনকে কল করি। এইভাবে, এই চক্রটি প্রতি সেকেন্ডে পুনরাবৃত্তি হয় এবং আমরা একটি কাউন্টার পাই যা স্ক্রিনে অতিবাহিত সময় প্রদর্শন করে। এখন, এই অ্যাপ্লিকেশনটির কোডটি একবার দেখে নেওয়া যাক। আসুন এই উদাহরণের জন্য সম্পূর্ণ কোড দেখুন:

# অন্তর্ভুক্ত করুন
#include

অকার্যকর প্রধান ( )
{
int সেকেন্ড = 0 ;
যখন ( 1 )
{
printf ( 'বিগত সময়: %i \n ' , সেকেন্ড ) ;
সেকেন্ড += 2 ;
ঘুম ( 2 ) ;
}

}

নিম্নলিখিত, আমরা এই কোডের সংকলন এবং সম্পাদন সহ একটি ছবি দেখতে পাব। আমরা দেখতে পাচ্ছি, প্রতি 2 সেকেন্ডে, প্রোগ্রামটি প্রক্রিয়াটি সম্পাদনের পর থেকে স্ক্রিনে অতিবাহিত সেকেন্ডগুলি প্রিন্ট করে।

Sleep() ফাংশনে সিগন্যালের প্রভাব

এই উদাহরণে, আমরা স্লিপ() ফাংশন ব্যবহার করে একটি প্রক্রিয়ার উপর সংকেতের প্রভাব পর্যবেক্ষণ করতে চাই। এটি করার জন্য, আমরা একটি সাধারণ অ্যাপ্লিকেশন তৈরি করি যা একটি main() ফাংশন এবং সংকেত 36 এর জন্য একটি হ্যান্ডলার নিয়ে গঠিত।

main() ফাংশনের প্রথম লাইনে, আমরা int-এর অবশিষ্ট ভেরিয়েবল ঘোষণা করি যেখানে আমরা স্লিপ() ফাংশন দ্বারা ফেরত দেওয়া মান সংরক্ষণ করি। তারপর, আমরা সিগন্যাল() ফাংশন ব্যবহার করে হ্যান্ডলারকে সিগন্যাল 36 এর সাথে আবদ্ধ করি। পরবর্তী লাইনে, আমরা প্রক্রিয়াটির পিআইডি প্রদর্শন করি যা আমরা দ্বিতীয় শেল থেকে প্রক্রিয়াটিতে একটি সংকেত পাঠাতে ব্যবহার করি। অবশেষে, আমরা sleep() ফাংশনকে কল করি এবং এর ইনপুট আর্গুমেন্টকে 60 সেকেন্ডে সেট করি, যা একটি দ্বিতীয় শেল থেকে একটি সংকেত পাঠানোর জন্য যথেষ্ট। আমরা স্লিপ() এ আউটপুট আর্গুমেন্ট হিসাবে অবশিষ্ট ভেরিয়েবল পাঠাই।

যে হ্যান্ডলারটি সিগন্যাল 36-এর সাথে সংযুক্ত থাকে সেটিতে কোডের একটি লাইন থাকে যেখানে printf() ফাংশনটি 'বাকী সময়:' বার্তাটি প্রিন্ট করে এবং তারপরে প্রক্রিয়ায় সিগন্যাল আসার সময় স্লিপ() দ্বারা প্রত্যাবর্তন করা হয়। এখানে, আসুন এই উদাহরণের জন্য কোডটি দেখি।

# অন্তর্ভুক্ত করুন
#include
# অন্তর্ভুক্ত করুন
#include

অকার্যকর হ্যান্ডলার ( int অবশিষ্ট ) ;

অকার্যকর প্রধান ( )
{
int অবশিষ্ট ;
সংকেত ( 36 , হ্যান্ডলার ) ;
printf ( 'প্রসেস আইডি: %i \n ' , getpid ( ) ) ;
অবশিষ্ট = ঘুম ( 60 ) ;
}

অকার্যকর হ্যান্ডলার ( int অবশিষ্ট )

{
printf ( 'বাকি সময়: %i \n ' , অবশিষ্ট ) ;
}

নিম্নলিখিত চিত্রটি যা আমরা দেখতে পাই তা এই কোডটির সংকলন এবং সম্পাদন দেখায়:

এই প্রক্রিয়ায় সংকেতগুলির প্রভাব দেখতে, আমরা এই কোডটি সংকলন করি এবং এটি চালাই। তারপর, একটি দ্বিতীয় টার্মিনাল থেকে, আমরা নিম্নলিখিত সিনট্যাক্স সহ একটি সংকেত পাঠাই:

হত্যা - n সংকেত পিআইডি

আমরা যে নিচের চিত্রটি দেখতে পাচ্ছি তা পূর্ববর্তী কনসোলে কোডটি কার্যকর করা এবং নিম্নলিখিত কনসোল থেকে প্রেরিত একটি সংকেতের আগমনের প্রভাব দেখায়। আপনি দেখতে পাচ্ছেন, প্রক্রিয়াটি জাগিয়ে সিগন্যাল ঘুম() ফাংশনের প্রভাবকে দমন করেছে:

উপসংহার

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

ব্যবহারিক উদাহরণ, কোড স্নিপেট এবং ছবি ব্যবহার করে, আমরা আপনাকে দেখিয়েছি কিভাবে একটি প্রক্রিয়াকে ঘুমোতে হয় এবং স্লিপ() ফাংশন ব্যবহার করে একটি সিগন্যালের আগমন ঘুমের প্রক্রিয়ায় কী প্রভাব ফেলে।