美文网首页
File I/O Positional Reads and Wr

File I/O Positional Reads and Wr

作者: 无无吴 | 来源:发表于2019-08-12 09:42 被阅读0次

Positional Reads and Writes

位置读写,代替lseek(),但不会更新当前文件指针的位置。

#define _XOPEN_SOURCE 500
#include <unistd.h>
ssize_t pread(int fd, void *buf, size_t count, off_t pos);
ssize_t pwrite(int fd, void *buf, size_t count, off_t pos);

任何混合的read()和write()调用都会更新当前文件指针的位置。
这两个函数与read(), write(), lseek()的联合使用有三个不同点:

  1. 这些调用更容易使用,特别是在执行棘手的操作时,例如向后或随机地遍历文件。
  2. 在完成后,它们不会更新文件指针。
  3. 它们避免使用lseek()时可能发生的任何潜在竞争。(原子操作,多线程情况下可以避免竞争)。

Truncating Files

#include <unistd.h>
#include <sys/types.h>
int ftruncate(int fd, off_t len);
int truncate(const char *path, off_t len);

这些系统调用最常用的方法是将文件截断到小于其当前长度的大小。成功返回时,文件的长度为len。
这些函数也可以用来“截断”成一个更大的文件,类似lseek() past the end of a file。扩展的字节填充了零。
举例:
我们有一个文件pirate.txt,长度是74个字节。内容是:


pirate.txt

在运行如下代码后:

int testTruncate() {
    int ret = truncate("../FileIO/pirate.txt", 45);
    if(ret == -1){
        perror("truncate");
        return -1;
    }
    return 0;
}
pirate.txt after truncate

相关文章

网友评论

      本文标题:File I/O Positional Reads and Wr

      本文链接:https://www.haomeiwen.com/subject/ishyjctx.html