文件长度
在前面介绍的stat结构体中,有关文件长度的成员有三个:文件长度st_size、文件I/O块长度st_blksize、所分配实际512字节块数量。其中结构成员st_size表示以字节为单位的文件长度。此字段只对普通文件、目录文件和符号链接有效。
- 对于普通文件,其长度可为0,读取这种文件时,将得到文件结束(end-of-file)指示。
- 对于目录文件,文件通常为一个整数(16或512)的倍数。
- 对于符号链接,文件长度是文件名中的实际字节数。
文件截短
在open函数中有一个参数O_TRUNC是把文件截短为0。这里记录的是另外两种函数:
/*********************************
* 函数功能:截短文件长度;
* 返回值:若成功则返回0,若出错则返回-1;
* 函数原型:
* int truncate(const char *pathname, off_t length);
* int ftruncate(int filedes, off_t length);
* 说明:
* length是文件截短后的长度;
* 若原始文件长度大于length,则length以外的数据不再访问;
* 若原始文件长度小于length,则根据不同的系统增加该文件的长度;
*********************************/
删除文件或更改文件名
这里有四个函数link、unlink、remove和rename;
/**********************
* 函数功能:创建一个指向现有文件的链接;
* 返回值:若成功则返回0,若出错则返回-1;
* 函数原型:
* int link(const char *existingpath, const char *newpath);
* 此函数创建一个新的目录项newpath,引用现有的文件existingpath。
* 若newpath已经存在,则返回出错。只创建newpath中的最后一个分量,
* 路径中的其他部分应该已经存在。
*
*
* 函数功能:删除一个现有的目录项;
* 返回值:若成功则返回0,若出错则返回-1;
* 函数原型:
* int unlink(const char *pathname);
*
* 此函数删除现有的目录项,并将由pathname所引用文件的链接计数减1。
* 如果存在指向该文件的其他链接,则仍然可以通过其他链接访问该文件。
* *********************/
测试:
#include "apue.h"
#include <fcntl.h>
int main(void)
{
if (open("access.c",O_RDWR) < 0)
err_sys("open error.");
if (unlink("access.c") < 0)
err_sys("unlink error.");
printf("file unlink.\n");
sleep(15);
printf("done.\n");
exit(0);
}
/*******************************
* 函数功能:解除对一个目录或文件的链接,对于文件,remove功能和unlink相同
* 对于目录,remove功能和rmdir相同;
* 返回值:若成功则返回0,若出错则返回-1;
* 函数原型:
* int remove(const char *pathname);
*
*
* 函数功能:更改现有文件或目录的名字;
* 返回值:若成功则返回0,若出错则返回-1;
* 函数原型:
* int rename(const char *oldname, const char *newname);
************************************/
参考资料
《unix高级环境编程》