【APUE】第3章 文件I/O (2) 函数creat、lseek、read、write使用说明

1、函数creat

可以使用creat函数创建一个新文件。

1 #include<fcntl.h>
2 int creat(const char *path, mode_t mode);
3 
4 返回值:
5 若成功,返回为只写打开的文件描述符;
6 若失败,返回-1

上述函数原型等价于:

1 open(path, O_WRONLY | O_CREAT | O_TRUNC, mode);

使用creat函数的一个不足之处是它以只写的凡是打开创建的新文件。在没有open新版本函数之前,如果要创建一个临时文件,并要先写该文件,然后又读该文件,则必须先调用creat、close,然后再调用open。即可以使用下列方式实现:

1 open(path, O_RDWR | O_CREAT | O_TRUNC, mode);

一般直接使用open函数替代creat函数。

2、函数lseek

每个打开的文件都有一个与之相关联的“当前文件偏移量”(current file offset)。它通常是一个非负整数(通常是),用以度量从文件开始处计算的字节数。通常,读、写操作都是从当前文件偏移量处开始,并使偏移量增加所读写的字节数。按系统默认情况下,当打开一个文件时,除非指定O_APPEND选项,否则该偏移量被设置成0.

可以调用lseek函数显示地为一个打开的文件设置偏移量:

1 #include<unistd.h>
2 off_t lseek(int fd, off_t offset, int whence);
3 
4 返回值:
5 若成功,返回新的文件偏移量
6 若失败,返回-1

对参数offset的解释与参数whence的值有关:

  • 若whence是SEEK_SET,则将该文件的偏移量设置为距文件开始处offset个字节。
  • 若whence是SEEK_CUR,则将该文件的偏移量设置为其当前值加offset,offset可正可负
  • 若whence是SEEK_END,则将该文件的偏移量设置为文件长度加offset,offset可正可负。

若lseek成功执行,则返回新的文件偏移量,为此可以使用下列方式确定打开文件的当前的偏移量:

猜你喜欢

转载自www.cnblogs.com/xuelisheng/p/10799292.html