无法使用lseek在文件末尾添加空格

时间:2014-05-17 13:15:22

标签: c system-calls lseek

我正在尝试将一些文本附加到已打开的文件中。我想在我的文件末尾添加pid号码。例如:Lorem ipsum dolor sit amet orci aliquam. 14872。我的代码工作正常,除了我没有让我的程序打印文件的最后一个字符和pid的第一个数字之间的空格。我试图通过添加lseek()作为文件末尾的偏移来使用1,并且正如我之前所说的那样,失败了。我不明白什么是错的,因为显然我得到了所有预期的结果:

Buffer size: 5.
Buffer content: 14872.
Current position: 41.

然后输出:

Lorem ipsum dolor sit amet orci aliquam.14872

对我来说毫无意义。所以这是我的代码:

void writeintheend(const int fd, const int pid, const int base)
{
    char *buffer;
    int buffer_size = getcharsfromint(pid, base);
    printf("Buffer size: %d.\n", buffer_size);
    buffer = (char *) malloc (sizeof(char) * buffer_size);
    sprintf(buffer, "%d", pid);
    printf("Buffer content: %s.\n", buffer);

    //It should add a space and then write the pid
    lseek(fd, 1, SEEK_END);
    printf("Current position: %d.\n", lseek(fd, 0, SEEK_CUR));
    write(fd, buffer, buffer_size);
    free(buffer);
}

1 个答案:

答案 0 :(得分:2)

查找文件的末尾不会用空格填充它,但会留下空字节,直到将某些内容写入间隙。您需要将一个前导' '写入您的pid缓冲区,然后将其写入结尾(没有搜索超过文件末尾)。