gpt4 book ai didi

C - 程序自动设置粘滞位?

转载 作者:太空宇宙 更新时间:2023-11-04 01:57:12 25 4
gpt4 key购买 nike

我有这段代码,我从一个文件中读取并将我读取的内容写入另一个文件。出于某种原因,我不断收到权限错误,但只有在我创建一个新文件并尝试写入时才会发生;如果我删除读取和写入的 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>

关于C - 程序自动设置粘滞位?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32643607/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com