gpt4 book ai didi

c - 使用 O_APPEND 打开文件后写入文件时出错 | O_CREATE

转载 作者:太空宇宙 更新时间:2023-11-04 00:50:20 24 4
gpt4 key购买 nike

我在 O_APPEND | 中打开了一个名为“pranav”的文本文件O_CREAT模式如下图:

     #include<unistd.h>
#include<fcntl.h>
#include<stdio.h>
main()
{
//FILE Descriptor fdes
/*Open file pranav.txt in write-only mode,
O_CREAT creates file if it does not exist*/
int fdes = open("pranav.txt",O_APPEND | O_CREAT );
//Error returns -1
if(fdes!=-1)
{
//To write on file
if((write(fdes,"Pranav",6))== -1)
write(2,"File_Writing_Error",18);
//To print on screen
else
write(1,"Done",4);
}
else
{
//Print "error" on screen
write(2,"File_Opening_Error",18);
}
close(fdes);
}

在 O_APPEND 模式下它执行 write(2,"File_Writing_Error",18);语句,因此无法在文件上写入“Pranav”,但如果我使用 O_WRONLY 模式,则不会发生此错误并且程序成功运行

最佳答案

open 的文档说,您必须恰好给出标志 O_RDONLYO_WRONLYO_RDWR 之一并且您可以使用其他标志的任意组合,例如 O_APPENDO_CREAT

除了 O_APPENDO_CREAT 之外,您没有提供 O_WRONLY。我的猜测是 O_RDONLY 为 0,因此如果不提供其中一个访问标志,您最终会得到 O_RDONLY,因此无法写入文件。

所以正确的代码应该是:

mode_t mode = S_IRWXU | SIRWXG;  // or any other mode
int fdes = open("pranav.txt", O_APPEND | O_CREAT | O_WRONLY, mode);

请注意附加参数 mode,如果标志包含 O_CREATO_TMPFILE,则此参数是必需的。

关于c - 使用 O_APPEND 打开文件后写入文件时出错 | O_CREATE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21155803/

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