gpt4 book ai didi

c++ - 使用 open() 在文件的特定位置写入

转载 作者:行者123 更新时间:2023-11-30 18:58:22 26 4
gpt4 key购买 nike

您好,我正在尝试模拟两个从网络发送和接收 C++ 文件的程序,例如客户端和服务器。首先,我必须将文件拆分为 4096 字节的页面,并将其发送到其他程序才能创建该文件。我通过网络发送和接收文件的方式是通过写入和读取。因此,在客户端程序中,我必须创建一个函数来接收包并将它们放入文件中。我无法找到将包放入文件的方法。例如,我的文件有 2 页,我必须使用这 2 页创建另一个文件。我也不知道它们是否按顺序排列,所以我必须创建文件并将它们放在正确的位置。

/*consider the connections are ok and the file's name is at char* name*/

int file=open(name,"O_CREAT | O_WRONLY,0666);
char buffer[4096];
int pagenumber;
for(int i=0;i<page_number;i++){
read(socket,&pagenumber,sizeof(int));
read(socket,buffer,sizeof(int));
write(file(pagenumber*4096),buffer,4096);
}

此代码适用于 pagenumber=0,但对于 pagenumber=1 则没有任何反应!你能帮助我吗?提前致谢!

最佳答案

要在文件中的某个位置写入,您必须使用 lseek

 off_t lseek(int fd, off_t offset, int whence);

它需要描述符、偏移量,最后一个参数是其中的常量:

SEEK_SET The offset is set to offset bytes.

SEEK_CUR The offset is set to its current location plus offset bytes.

SEEK_END The offset is set to the size of the file plus offset bytes.

如果您知道文件有多大,则可以使用 ftruncate。

int ftruncate(int fd, off_t length);

无论如何,即使您创建一个巨大的文件,由于 Linux 上的大多数文件系统都支持稀疏文件,磁盘上的实际文件将是已写入的 block 的总和。

关于c++ - 使用 open() 在文件的特定位置写入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16873893/

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