【问题标题】:Can't use lseek to add a space at the end of a file不能使用 lseek 在文件末尾添加空格
【发布时间】:2014-05-17 13:15:22
【问题描述】:

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

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);
}

【问题讨论】:

  • 由于您从不检查任何函数调用的返回值,您似乎并不真正关心,或者可能更喜欢不同的语言...
  • lseek 不会添加空格,它会在那里留下一个零字节。如果要添加空格,则必须写空格字符。
  • 随便sprintf(buffer, " %d", pid);
  • @KerrekSB 并不是我不在乎,我是处理系统调用和 UNIX 编程的新手,我只是在学习并渴望最佳实践和建设性的批评。所以干杯。
  • @haunted85:当然,建设性的批评:阅读您使用的所有功能的所有手册,并确保处理所有可能的路径。 (没有人天生就是专家 - 区别在于谁阅读文档!:-))

标签: c system-calls lseek


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2012-08-06
    • 2013-10-16
    • 2017-06-02
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多