You can use programming to change the value of a field in the file. UpperCode:
Int Writepcap ( Char * Filename, Int Begin, Int Len, Char * Content)
{
If (! Pcap |! Content)
Return - 1 ;
File * fp = NULL;
Fp = fopen (filename, " AB " ); // RB +
If (! FP)
Return - 2 ;
If (- 1 = Fseek (FP, begin, seek_set ))
{
Fclose (FP );
Return - 3 ;
}
// Printf ("curr: % LD \ n", ftell (FP ));
If (Fwrite (content, Sizeof (Unsigned Char ), Len, FP) <= 0 )
{
Fclose (FP );
Return - 4 ;
}
Fclose (FP );
Return 0 ;
}
The result shows that the ftell output position is correct, but it is written at the end.
In Linux, man fopen sees:
A + openForReading and appending (writing at end of file). The fileIsCreatedIfIt does not exist. The initial file
PositionForReadingIsAt the beginning of the file, but outputIsAlways appended to the end of the file.
It turns out that.
Solution: change to RB +.