我的程序几乎可以正常工作。预期目的是从末尾读取文件并将内容复制到目标文件。然而,让我感到困惑的是lseek()
方法更多,所以我应该如何设置偏移量。
我src
现在的内容是:
Line 1
Line 2
Line 3
目前我在目标文件中得到的是:
Line 3
e 2
e 2 ...
据我了解,调用int loc = lseek(src, -10, SEEK_END);
会将源文件中的“光标”移动到末尾,然后将其从 EOF 偏移到 SOF 10 个字节,并且 loc 的值将是我扣除偏移后的文件大小。然而,在 C 的 7 小时后,我几乎在这里脑死亡。
int main(int argc, char* argv[])
{
// Open source & source file
int src = open(argv[1], O_RDONLY, 0777);
int dst = open(argv[2], O_CREAT|O_WRONLY, 0777);
// Check if either reported an erro
if(src == -1 || dst == -1)
{
perror("There was a problem with one of the files.");
}
// Set buffer & block size
char buffer[1];
int block;
// Set offset from EOF
int offset = -1;
// Set file pointer location to the end of file
int loc = lseek(src, offset, SEEK_END);
// Read from source from EOF to SOF
while( loc > 0 )
{
// Read bytes
block = read(src, buffer, 1);
// Write to output file
write(dst, buffer, block);
// Move the pointer again
loc = lseek(src, loc-1, SEEK_SET);
}
}