我有这段代码,我从一个文件中读取并将我读取的内容写入另一个文件。出于某种原因,我不断收到权限错误,但只有在我创建一个新文件并尝试写入时才会发生;如果我删除读取和写入的 block ,它会很好地创建文件并具有正确的权限。但是,一旦我尝试写入,创建的文件的权限如下所示:rwSr-Sr--
if ((dst_fd = open(dst_path, O_RDWR | O_CREAT)) < 0){
close(src_fd);
exit(1);
}
while ((n = read(src_fd, buf, BUF_SIZE)) > 0){
if (write(dst_fd, buf, n) < 0){
exit(1);
}
}
为什么会这样?我似乎无法找到让这一切开始发生的我所做的改变,但我不认为我真的做了那么糟糕的事情。
查看打开的文档。签名是:
int _open(
const char *filename,
int oflag [,
int pmode]
);
注意 pmode。它是可选的,您不会使用它。
您正在使用 oflag,它通知打开您打算执行的操作,但未设置任何权限。相反,默认情况下将应用 umask 建立的默认权限。如果要控制权限,还需要包含pmode。
open 的文档说当使用 O_CREAT
时需要 pmode,你有。
所以,添加你想要的权限,通常是_S_IREAD | S_IWRITE
.
喜欢:
open(dst_path, O_RDWR | O_CREAT, _S_IREAD | S_IWRITE))
您可能需要检查与这些标志关联的 header :
<fcntl.h>, <sys\types.h>, <sys\stat.h>
我是一名优秀的程序员,十分优秀!