注: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)
时间: 2024-10-10 22:20:15