Solaris11.3 OS中的fwrite调用后文件位置不正确

在编写二进制文件时遇到问题。为了调试该问题,我通过调用setbuf(pf,0)使输出文件流不受缓冲。以下是代表问题的代码的一部分。在致电fwrite之前,请pos0=943195。通过调用fwrite,我在文件中写入了一个整数。但是,在致电fwrite之后,pos=943200应该是 943199

    FILE* pf = NULL;
    pfSenc = fopen(szFilePath,"r+b");
    setbuf(pfSenc,0);
    // lots of read and write operations on this file
    int pos0 = ftell(pf);
    fwrite(&some_num,sizeof(int),1,pf);
    int pos = ftell(pf);
    // more read and write operations on this file.
    fclose(pf);

在Solaris OS中写入二进制文件时,这是某种对齐要求吗?由于943195不能除以4,所以fwrite从943196开始?写入文件的内容还显示fwrite以1个字节的偏移量开始写入。如果是对齐问题,可以以某种方式禁用此功能吗?该代码可以在Windows和Centos7等其他操作系统中正常工作。

更新: 以下系统调用:

1334: llseek(18,SEEK_CUR)    = 943195
1334: write(18,"B1",1)    = 1
1334: write(18," !CC13\0",4)   = 4
1334: llseek(18,SEEK_CUR)    = 943200

由以下三行代码生成:

int pos0 = ftell(pf);
fwrite(&some_num,pf);
int pos = ftell(pf);

在写入int编号之前,有一个意外的额外写入调用:

1334: write(18,1)    = 1

我不知道这个电话来自哪里?该应用程序是单线程的,在其他任何地方都不会打开该文件。

shangkewocaoniquanji 回答:Solaris11.3 OS中的fwrite调用后文件位置不正确

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3050143.html

大家都在问