home *** CD-ROM | disk | FTP | other *** search
/ PC World 2005 June / PCWorld_2005-06_cd.bin / software / vyzkuste / firewally / firewally.exe / framework-2.3.exe / test_fcntl.py < prev    next >
Text File  |  2003-12-30  |  2KB  |  62 lines

  1. #! /usr/bin/env python
  2. """Test program for the fcntl C module.
  3.    OS/2+EMX doesn't support the file locking operations.
  4.    Roger E. Masse
  5. """
  6. import struct
  7. import fcntl
  8. import os, sys
  9. from test.test_support import verbose, TESTFN
  10.  
  11. filename = TESTFN
  12.  
  13. try:
  14.     os.O_LARGEFILE
  15. except AttributeError:
  16.     start_len = "ll"
  17. else:
  18.     start_len = "qq"
  19.  
  20. if sys.platform.startswith('atheos'):
  21.     start_len = "qq"
  22.  
  23. if sys.platform in ('netbsd1', 'Darwin1.2', 'darwin',
  24.                     'freebsd2', 'freebsd3', 'freebsd4', 'freebsd5',
  25.                     'bsdos2', 'bsdos3', 'bsdos4',
  26.                     'openbsd', 'openbsd2', 'openbsd3'):
  27.     lockdata = struct.pack('lxxxxlxxxxlhh', 0, 0, 0, fcntl.F_WRLCK, 0)
  28. elif sys.platform in ['aix3', 'aix4', 'hp-uxB', 'unixware7']:
  29.     lockdata = struct.pack('hhlllii', fcntl.F_WRLCK, 0, 0, 0, 0, 0, 0)
  30. elif sys.platform in ['os2emx']:
  31.     lockdata = None
  32. else:
  33.     lockdata = struct.pack('hh'+start_len+'hh', fcntl.F_WRLCK, 0, 0, 0, 0, 0)
  34. if lockdata:
  35.     if verbose:
  36.         print 'struct.pack: ', `lockdata`
  37.  
  38. # the example from the library docs
  39. f = open(filename, 'w')
  40. rv = fcntl.fcntl(f.fileno(), fcntl.F_SETFL, os.O_NONBLOCK)
  41. if verbose:
  42.     print 'Status from fnctl with O_NONBLOCK: ', rv
  43.  
  44. if sys.platform not in ['os2emx']:
  45.     rv = fcntl.fcntl(f.fileno(), fcntl.F_SETLKW, lockdata)
  46.     if verbose:
  47.         print 'String from fcntl with F_SETLKW: ', `rv`
  48.  
  49. f.close()
  50. os.unlink(filename)
  51.  
  52.  
  53. # Again, but pass the file rather than numeric descriptor:
  54. f = open(filename, 'w')
  55. rv = fcntl.fcntl(f, fcntl.F_SETFL, os.O_NONBLOCK)
  56.  
  57. if sys.platform not in ['os2emx']:
  58.     rv = fcntl.fcntl(f, fcntl.F_SETLKW, lockdata)
  59.  
  60. f.close()
  61. os.unlink(filename)
  62.