The fcntl Module

(Unix only) The fcntl module provides an interface to the ioctl and fcntl functions on Unix. They are used for "out of band" operations on file handles and I/O device handles. This includes things like reading extended attributes, controlling blocking, modifying terminal behavior, and so on.

Exactly how to use these functions is highly platform dependent. For more information on what you can do on your platform, check the corresponding Unix manpages.

This module also provides an interface to Unix's file locking mechanisms. Example 12-1 uses the flock function to place an advisory lock on the file, while it is being updated.

The output shown later was obtained by running three instances of the program in parallel, like this (all on one command line):

python fcntl-example-1.py& python fcntl-example-1.py& 
 python fcntl-example-1.py&

If you comment out the call to flock, the counter will not be updated properly.

Example 12-1. Using the fcntl Module

File: fcntl-example-1.py

import fcntl, FCNTL
import os, time

FILE = "counter.txt"

if not os.path.exists(FILE):
 # create the counter file if it doesn't exist
 file = open(FILE, "w")
 file.write("0")
 file.close()

for i in range(20):
 # increment the counter
 file = open(FILE, "r+")
 fcntl.flock(file.fileno(), FCNTL.LOCK_EX)
 counter = int(file.readline()) + 1
 file.seek(0)
 file.write(str(counter))
 file.close() # unlocks the file
 print os.getpid(), "=>", counter
 time.sleep(0.1)

30940 => 1
30942 => 2
30941 => 3
30940 => 4
30941 => 5
30942 => 6

Core Modules

More Standard Modules

Threads and Processes

Data Representation

File Formats

Mail and News Message Processing

Network Protocols

Internationalization

Multimedia Modules

Data Storage

Tools and Utilities

Platform-Specific Modules

Implementation Support Modules

Other Modules



Python Standard Library
Python Standard Library (Nutshell Handbooks) with
ISBN: 0596000960
EAN: 2147483647
Year: 2000
Pages: 252
Authors: Fredrik Lundh

Similar book on Amazon

Flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net