【问题标题】:damaged file after using lseek function to change file position in c ( getting same size but corrupted content)使用 lseek 函数更改 c 中的文件位置后损坏的文件(获得相同的大小但内容损坏)
【发布时间】:2014-10-21 14:44:11
【问题描述】:

我在我的套接字应用程序中使用 lseek 来更改文件位置以防数据包丢失,然后重新传输丢弃的数据包,所以我多次更改文件位置,我很确定我' m 正确设置位置相关参数。我在客户端获得相同的文件大小没问题,但是我更改文件位置的次数越多,我发现自己无法打开传输的文件就越多。

你知道为什么会这样吗?

【问题讨论】:

  • 能贴出代码吗?
  • 所以你可能在你的文件中写了一些垃圾。给我们更多的信息,否则没有人能给你任何有用的提示。
  • 哪个程序导致损坏,是客户端的还是服务器端的?
  • 在服务器端我读取和定位文件,在客户端我写我在服务器端读取的内容。不知道问题出在哪里
  • 为什么结构体包装编译指示被注释掉了?结构填充肯定是第一批嫌疑人之一吗?

标签: c file sockets udp lseek


【解决方案1】:

您是否对两个程序使用相同的编译器设置?也许您的每个程序的数据(字节)对齐方式都不相同。因此,您的结构的大小会有所不同,从而导致您的搜索计算不正确/不同。

【讨论】:

  • 平台本身是不相关的——但我想我知道你的意思,但是如果你使用不同的项目——这些都可以有不同的字节对齐方式。你检查过吗?什么是字节对齐?
  • 我确实认为字节对齐会给你看起来是损坏的数据...如果你检查你的设置很容易确认。还有一件事是我不确定这个 pos = lseek(fd,0,SEEK_CUR);会给你想要的结果。使用 SEEK_SET 或非零的偏移量
猜你喜欢
  • 1970-01-01
  • 2023-04-08
  • 2011-09-25
  • 2021-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多