Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Python

पायथन में fcntl और ioctl सिस्टम कॉल्स

फाइल्स और I/O को नियंत्रित करने के लिए, हमें 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)

यह मेथड फाइल डिस्क्रिप्टर का उपयोग करके फाइल पर लॉक ऑपरेशन op करने के लिए उपयोग किया जाता है। कुछ सिस्टम्स पर, इस मेथड को fcntl() मेथड का उपयोग करके एमुलेट किया जा सकता है।

मेथड fcntl.lockf(fd, operation[, length[, start[, whence]]])

यह मेथड लॉकिंग कॉल्स के चारों ओर एक वॉपर के रूप में कार्य करने के लिए उपयोग किया जाता है। ऑपरेशन आर्गुमेंट को फाइल को लॉक या अनलॉक करने के लिए पास किया जाता है। ऑपरेशन के अलग-अलग मान हैं।

  • 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') # शुरुआती नंबर के रूप में 0 स्टोर करें
    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. पायथन पैंडास - सीबॉर्न के साथ काउंट प्लॉट बनाएं और बार्स को स्टाइल करें पायथन पैंडास - सीबॉर्न के साथ काउंट प्लॉट बनाएं और बार्स को स्टाइल करें

    सीबॉर्न में काउंट प्लॉट का उपयोग प्रत्येक श्रेणीबद्ध बिन में अवलोकनों की गिनती को बार्स का उपयोग करके प्रदर्शित करने के लिए किया जाता है। इसके लिए seaborn.countplot() का उपयोग किया जाता है। facecolor, linewidth और edgecolor पैरामीटर्स का उपयोग करके बार्स को स्टाइल करें।मान लीजिए हमारा डेटासेट CSV फ़

  1. पायथन प्रोग्राम: सबसे अधिक बार आने वाला कैरेक्टर और उसकी गिनती ढूंढें पायथन प्रोग्राम: सबसे अधिक बार आने वाला कैरेक्टर और उसकी गिनती ढूंढें

    इस लेख में, हम दिए गए प्रॉब्लम स्टेटमेंट को हल करने के समाधान और दृष्टिकोण के बारे में सीखेंगे। प्रॉब्लम स्टेटमेंट एक इनपुट स्ट्रिंग दिए जाने पर, हमें सबसे अधिक बार आने वाले कैरेक्टर और उसकी गिनती ढूंढने की आवश्यकता है। दृष्टिकोण Counter मेथड का उपयोग करके एक डिक्शनरी बनाएं जिसमें स्ट्रिंग्स कुं

  1. - पायथन में =+ और += क्या करते हैं?

    += ऑपरेटर object.__iadd__() फ़ंक्शन के लिए सिंटैक्टिक शुगर है। पायथन डॉक्स से: ये मेथड ऑगमेंटेड अंकगणितीय असाइनमेंट (+=, -=, *=, @=, /=, //=, %=, **=, <<=, >>=, &=, ^=, |=) को इम्प्लीमेंट करने के लिए कॉल किए जाते हैं। ये मेथड इन-प्लेस ऑपरेशन (self को मॉडिफाई करना) करने का प्रयास करना चा