কম্পিউটার

পাইথনে fcntl এবং ioctl সিস্টেম কল করে


ফাইল এবং io নিয়ন্ত্রণ করতে, আমাদের fcntl ব্যবহার করা উচিত মডিউল এটি মূলত fcntl() এবং ioctl() ইউনিক্স রুটিনের একটি ইন্টারফেস।

এই মডিউলের সমস্ত পদ্ধতি তাদের প্রথম আর্গুমেন্ট হিসাবে একটি পূর্ণসংখ্যা বা io.IOBase ফাইল-ডেস্ক্রিপ্টর নেয়৷

এই মডিউলটি ব্যবহার করতে, আমাদের এটি ব্যবহার করে আমদানি করা উচিত।

import fcntl

fcntl মডিউলের কিছু মডিউল আছে, সেগুলো হল −

পদ্ধতি fcntl.fcntl(fd, op[, arg])

এই পদ্ধতিটি ফাইল বর্ণনাকারী ব্যবহার করে ফাইলে অপারেশন করতে ব্যবহৃত হয়। অপারেশনটি op দ্বারা সংজ্ঞায়িত করা হয়েছে . তৃতীয় যুক্তিটি ঐচ্ছিক। এটি হয় পূর্ণসংখ্যা টাইপ মান বা স্ট্রিং টাইপ মান হতে পারে। যখন আর্গুমেন্টটি পূর্ণসংখ্যা টাইপ হয়, তখন রিটার্ন মান হবে C fcntl() কলের মান। যখন এটি স্ট্রিং হয়, এটি বাইনারি গঠন প্রতিনিধিত্ব করে। যখন এই ফাংশন ব্যর্থ হয়, এটি একটি IOError উত্থাপন করে।

পদ্ধতি fcntl.ioctl(fd, op[, arg[, mutate_flag]])

এই পদ্ধতিটি fcntl() পদ্ধতির অনুরূপ, তবে এই ক্ষেত্রে যুক্তি পরিচালনা করা আরও জটিল। যুক্তিতে, যদি মিউটেবল বাফারটি পাস করা হয়, তবে এর আচরণ mutate_flag-এর উপর নির্ভর করবে। যখন এটি সত্য হয়, তখন বাফার পরিবর্তনযোগ্য হতে পারে, অন্যথায় এটি শুধুমাত্র পঠনযোগ্য বাফারের মতো কাজ করবে৷

পদ্ধতি fcntl.flock(fd, op)

এই পদ্ধতিটি ফাইল_ডেস্ক্রিপ্টর ব্যবহার করে ফাইলে লক অপারেশন সম্পাদন করতে ব্যবহৃত হয়। কিছু সিস্টেমে, এই পদ্ধতিটি fcntl() পদ্ধতি ব্যবহার করে অনুকরণ করা যেতে পারে।

পদ্ধতি fcntl.lockf(fd, অপারেশন[, length[, start[, কোথা থেকে]]])

এই পদ্ধতিটি লকিং কলগুলির চারপাশে একটি মোড়ক হিসাবে কাজ করতে ব্যবহৃত হয়। ফাইলটি লক বা আনলক করতে অপারেশন আর্গুমেন্ট পাস করা হয়। অপারেশনের বিভিন্ন মান আছে।

  • LOCK_UN - ফাইলটি আনলক করতে

  • LOCK_SH - শেয়ার্ড লক

  • LOCK_EX - এক্সক্লুসিভ লক

উদাহরণ কোড

import fcntl, os, time
counter_file = 'my_counter.txt'
if not os.path.exists(counter_file):
   counter_file = open('my_counter.txt', 'w')
   counter_file.write('0') #Store 0 as starting number
   counter_file.close()
for i in range(15):
   counter_file = open('my_counter.txt', 'r+')
   fcntl.flock(counter_file.fileno(), fcntl.LOCK_EX)
   count = int(counter_file.readline()) + 1
   counter_file.seek(0)
   counter_file.write(str(count))
   counter_file.close()
   print('Process ID: ' + str(os.getpid()) + ', Count: ' + str(count))
   time.sleep(0.2)

আউটপুট

$ python3 example.py
Process ID: 12698, Count: 1
Process ID: 12698, Count: 2
Process ID: 12698, Count: 3
Process ID: 12698, Count: 4
Process ID: 12698, Count: 5
Process ID: 12698, Count: 6
Process ID: 12698, Count: 7
Process ID: 12698, Count: 8
Process ID: 12698, Count: 9
Process ID: 12698, Count: 10
Process ID: 12698, Count: 11
Process ID: 12698, Count: 12
Process ID: 12698, Count: 13
Process ID: 12698, Count: 14
Process ID: 12698, Count: 15
$
$
$ cat my_counter.txt
15
$

  1. Python Pandas - একটি কাউন্ট প্লট তৈরি করুন এবং Seaborn দিয়ে বারগুলিকে স্টাইল করুন

  2. পাইথন প্রোগ্রাম সবচেয়ে ঘটমান অক্ষর এবং তার সংখ্যা খুঁজে বের করতে

  3. পাইথনে সবচেয়ে সাধারণ POSIX সিস্টেম কল

  4. পাইথনে =+ এবং +=কি করে?