gpt4 book ai didi

C 中的 Chmod 分配错误的权限

转载 作者:行者123 更新时间:2023-11-30 21:20:07 24 4
gpt4 key购买 nike

以下是我的方法代码,该方法将文件从文件路径复制到作为目标提供的目录。副本工作得很好,但是我的 chmod 调用为目标中的复制文件分配了错误的权限。如果源中的权限为644,则复制的文件的权限为170或120。

我已经尝试调试这个问题几个小时了,这让我有点疯狂,所以非常感谢任何帮助。

void copy_file(char* src, char* dest) {

char a;
//extract file name through a duplicate ptr
char* fname = strdup(src);
char* dname = basename(fname);
//open read and write streams
FILE* read;
FILE* write;

read = fopen(src, "r");
chdir(dest);
write = fopen(dname, "w");

//error checking
if (read == NULL) //|| (write == NULL))
{
perror("Read Error: ");
exit(0);
}

else if (write == NULL)
{
perror("Write Error: ");
exit(0);
}

//write from src to dest char by char
while (1){
a = fgetc(read);
if (a == EOF)
{
break;
}
fputc(a, write);
}

//close files
fclose(read);
fclose(write);

// this is where I attempt to assign source file permissions
//and it goes horribly wrong
struct stat src_st;
if(stat(src, &src_st)){
perror("stat: ");
}

chmod(dname, src_st.st_mode);
printf("%o\n", src_st.st_mode & 0777);
}

最佳答案

fopen(src, "r") ,那么你chdir(dest) 。这意味着当您稍后调用stat(src, &src_st)时,没有理由认为stat将访问与 fopen 相同的文件确实如此,或者确实如此stat将访问任何文件。

如果stat失败,您继续调用chmod无论如何,所以你传递了 src_st.st_mode 中的任何随机垃圾。至chmod .

您应该使用fstat(fileno(read), &src_st)在调用fclose(src)之前,而不是调用 stat(src, &src_st) .

关于C 中的 Chmod 分配错误的权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42890656/

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