《unix高级环境编程》文件和目录——文件操作

文件长度

     在前面介绍的stat结构体中,有关文件长度的成员有三个:文件长度st_size、文件I/O块长度st_blksize、所分配实际512字节块数量。其中结构成员st_size表示以字节为单位的文件长度。此字段只对普通文件、目录文件和符号链接有效。

  1. 对于普通文件,其长度可为0,读取这种文件时,将得到文件结束(end-of-file)指示。
  2. 对于目录文件,文件通常为一个整数(16或512)的倍数。
  3. 对于符号链接,文件长度是文件名中的实际字节数。

文件截短

      在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高级环境编程》


你可能感兴趣的:(remove,文件操作,link,Unix编程,unlink)