फ़ाइलों और 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)
इस विधि का उपयोग file_descriptor का उपयोग करके फ़ाइल पर लॉक ऑपरेशन करने के लिए किया जाता है। कुछ प्रणालियों पर, इस विधि का fcntl() विधि का उपयोग करके अनुकरण किया जा सकता है।
विधि fcntl.lockf(fd, Operation[, length[, start[, wherece]]])
इस विधि का उपयोग लॉकिंग कॉल के चारों ओर एक आवरण के रूप में करने के लिए किया जाता है। फ़ाइल को लॉक या अनलॉक करने के लिए ऑपरेशन तर्क पारित किया जाता है। संचालन के विभिन्न मूल्य हैं।
-
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 $