私のプログラムはほぼ正常に動作しています。意図された目的は、ファイルを最後から読み取り、内容を宛先ファイルにコピーすることです。ただし、私を混乱させるのは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);
}
}