python os.open 用处

注:os.open 是 POSIX 的低层次的系统调用

  这两天在看shadowsocks的源码学习,看到里面的文件的读写用到了 os.open 而不是平常使用的open.所以,很奇怪。然后,大致发现了这个好处。

f=open('data.txt','w')

如果你调用了普通的open,且你本来没有‘data.txt’ 这个文件,那么会自动创建一个‘data.txt’ 的文件。你可以看到默认的权限是:

-rw-rw-r-- 1 yaoge yaoge    7  5月 11 00:07 data.txt

但是在这里因为涉及记录shadowsocks的log,应该尽可能的减少权限。

所以调用os.open 可以自己定义新创建文件的权限。

import stat
import os
fd=os.open('data.txt',os.O_RDWR|os.O_CREAT,
                   stat.S_IRUSR | stat.S_IWUSR)
os.write(fd,bytes('123456'))

-rw------- 1 yaoge yaoge    7  5月 11 00:07 data.txt

其他:

在源码中还看到一些用法,记录一下

#在调用exec前,自动帮你关闭文件描述符 就相当于在exec前的代码增加os.close(fd)
fcntl.fcntl(fd,fcntl.F_SETFD,fcntl.FD_CLOEXEC)

劝告性锁

# 互斥锁定#无法建立锁定时,此操作可不被阻断,马上返回进程
# os.SEEK_SET - 文件的开头, 可以用 0 代替
 fcntl.lockf(fd, fcntl.LOCK_EX | fcntl.LOCK_NB,
                 0, 0, os.SEEK_SET)


原文地址:https://www.cnblogs.com/baobaopangzi88/p/5479962.html