gpt4 book ai didi

c - Linux 和 C : 'write()' does not write anything to file

转载 作者:太空狗 更新时间:2023-10-29 11:24:49 25 4
gpt4 key购买 nike

我有一个简单的任务要用这个例程完成,它所要做的就是打开文件,从缓冲区追加数据并关闭。为此,我在 Linux 机器上使用“打开”和“写入”。虽然'write()'后的返回码是正数,但是文件大小并没有增加,一直是空的。我想弄清楚下面的代码有什么问题。认为一些新鲜的眼睛可以带来一些启发。

#define BIT_Q_FILE  ".\\bitq.dat"

int BQWrite(void *p)
{
int fd ;
int rc = -1 ;

fd = open(BIT_Q_FILE, O_RDWR | O_APPEND ) ;

if (fd < 0)
return -1;


memset(&BITQBuff,0,sizeof(typeBITQFile));
memcpy(&BITQBuff.pBitQueue,p,sizeof(typeBITQueue));

rc = write(fd, &BITQBuff,sizeof(typeBITQFile)) ;

close(fd) ;

if(rc!=sizeof(typeBITQFile))
{
return -1;
}

rc = sizeof(typeBITQueue);

return rc ;
}

最佳答案

我在这里遇到了你的问题:

#define BIT_Q_FILE  ".\\bitq.dat"

您遇到了从 Windows 到 Unix 的三个移植问题:

  • Unix 上的目录分隔符是/ , 不是 \ .
  • 但是 Unix 非常乐意让你输入 \在文件名的中间。 (只有 字节——我的意思是字节,而不是字符——不能出现在路径名组件中的是那些值为 0x2F 和 0x00 的字节。)
  • Unix 也非常乐意让文件名以点开头;但是,默认情况下 ls不打印任何以点开头的文件名。

因此您希望将数据写入名为 bitq.dat 的文件中在当前目录中,但它实际上被写入名为 .\bitq.dat 的文件中,仍在当前目录中。该文件默认是隐藏的,所以看起来数据消失得无影无踪。 ls -a将显示隐藏文件,rm .\\bitq.dat将删除它。要修复您的代码,只需将定义更改为

#define BIT_Q_FILE "bitq.dat"

没有必要放前导./在传递给 open 的路径上.

这可能不是您的代码的唯一问题,但我没有看到任何其他明显错误的地方。如果您需要更多帮助,请发布一个新问题,其中包含人们可以自行编译和运行的完整最小测试程序。

关于c - Linux 和 C : 'write()' does not write anything to file,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10505173/

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