zoukankan      html  css  js  c++  java
  • 文件操作 之 各类函数

    chmod

    头函数:
    #include < sys/stat.h>

    函数定义:
    int chmod(const char *path, mode_t mode);
    int fchmod(int fd, mode_t mode);

    函数说明:
    chmod()会依参数mode 权限来更改参数path 指定文件的权限。
    fchmod()会依参数mode 权限来更改参数fd 所指文件的权限。参数fd 为已打开文件的文件描述符。参数mode 和chmod ()函数一致。

    返回值:
    权限改变成功则返回0, 失败返回-1, 错误原因存于errno

    参数 mode 有下列数种组合:
    S_ISUID 04000 文件的 (set user-id on execution)位
    S_ISGID 02000 文件的 (set group-id on execution)位
    S_ISVTX 01000 文件的sticky 位
    S_IRUSR 00400 文件所有者具可读取权限
    S_IWUSR 00200 文件所有者具可写入权限
    S_IXUSR 00100 文件所有者具可执行权限
    S_IRGRP 00040 用户组具可读取权限
    S_IWGRP 00020 用户组具可写入权限
    S_IXGRP 00010 用户组具可执行权限
    S_IROTH 00004 其他用户具可读取权限
    S_IWOTH 00002 其他用户具可写入权限
    S_IXOTH 00001 其他用户具可执行权限

    错误代码:
    EPERM 进程的有效用户识别码与欲修改权限的文件拥有者不同, 而且也不具root 权限.
    EACCESS 参数path 所指定的文件无法存取.
    EROFS 欲写入权限的文件存在于只读文件系统内.
    EFAULT 参数path 指针超出可存取内存空间.
    EINVAL 参数mode 不正确
    ENAMETOOLONG 参数path 太长
    ENOENT 指定的文件不存在
    ENOTDIR 参数path 路径并非一目录
    ENOMEM 核心内存不足
    ELOOP 参数path 有过多符号连接问题.
    EIO I/O 存取错误

    chown

    #include <unistd.h>

    int chown(const char *path, uid_t owner, gid_t group);
    int fchown(int fd, uid_t owner, gid_t group);
    int lchown(const char *path, uid_t owner, gid_t group);

    函数说明:chown()会将参数path 指定文件的所有者变更为参数owner 代表的用户,而将该文件的组变更为参数group 组。如果参数owner 或group 为-1,对应的所有者或组不会有所改变。root 与文件所有者皆可改变文件组,但所有者必须是参数group 组的成员。当root 用chown()改变文件所有者或组时,该文件若具有S_ISUID或S_ISGID 权限,则会清除此权限位,此外如果具有S_ISGID 权限但不具S_IXGRP 位,则该文件会被强制锁定,文件模式会保留。

    返回值:成功则返回0, 失败返回-1, 错误原因存于errno

    utime

    #include <sys/types.h>
    #include <utime.h>

    int utime(const char * filename, struct utimbuf * buf);

    函数说明:utime()用来修改参数filename 文件所属的inode 存取时间。结构utimbuf 定义如下:
    struct utimbuf
    {
    time_t actime;
    time_t modtime;
    };

    返回值:如果参数buf 为空指针(NULL), 则该文件的存取时间和更改时间全部会设为目前时间.。执行成功则返回0,失败返回-1,错误代码存于errno。

    truncate

    #include <unistd.h>
    #include <sys/types.h>

    int truncate(const char *path, off_t length);
    int ftruncate(int fd, off_t length);

    函数说明:truncate()会将参数path 指定的文件大小改为参数length 指定的大小. 如果原来的文件大小比参数length 大, 则超过的部分会被删去.

    返回值:执行成功则返回0, 失败返回-1, 错误原因存于errno.

    link

    #include <unistd.h>

    int link(const char *oldpath, const char *newpath);

    函数说明:link()以参数newpath 指定的名称来建立一个新的连接(硬连接)到参数oldpath 所指定的已存在文件. 如果参数newpath 指定的名称为一已存在的文件则不会建立连接.

    返回值:成功则返回0, 失败返回-1, 错误原因存于errno.

    注:

    创建一个硬链接
    当rm删除文件时,只是删除了目录下的记录项和把inode硬链接计数减1,当硬链接计数减为0时,才会真正的删除文件。
    链接通常要求位于同一文件系统中,POSIX允许夸文件系统
    符号链接没有文件系统限制
    通常不允许创建目录的硬链接,某些unix系统下超级用户可以创建目录的硬链
    创建目录项以及增加硬链接计数应当是一个原子操作
    symlink

    link()所建立的硬连接无法跨越不同文件系统, 如果需要则改用symlink()

    #include <unistd.h>

    int symlink(const char * oldpath, const char * newpath);

    函数说明:symlink()以参数newpath 指定的名称来建立一个新的连接(符号连接)到参数oldpath 所指定的已存在文件. 参数oldpath 指定的文件不一定要存在, 如果参数newpath 指定的名称为一已存在的文件则不会建立连接.

    返回值:成功则返回0, 失败返回-1, 错误原因存于errno.

    readlink

    #include <unistd.h>

    int readlink(const char * path, char * buf, size_t bufsiz);

    函数说明:读符号链接所指向的文件名字,不读文件内容,readlink()会将参数path 的符号连接内容存到参数buf 所指的内存空间, 返回的内容不是以NULL作字符串结尾, 但会将字符串的字符数返回. 若参数bufsiz 小于符号连接的内容长度, 过长的内容会被截断.

    返回值:执行成功则传符号连接所指的文件路径字符串, 失败则返回-1, 错误代码存于errno

    unlink

    #include <unistd.h>

    int unlink(const char * pathname);

    函数说明:unlink()会删除参数pathname 指定的文件。

    如果是符号链接,删除符号链接
    如果是硬链接,硬链接数减1,当减为0时,释放数据块和inode
    如果文件硬链接数为0,但有进程已打开该文件,并持有文件描述符,则等该进程关闭该文件时,kernel才真正去删除该文件
    利用该特性创建临时文件,先open或creat创建一个文件,马上unlink此文件
    rename

    #include <stdio.h>
    int rename(const char *oldpath, const char *newpath);

    函数说明:重命名文件、改变文件路径或更改目录名称

    参数:oldname为旧文件名,newname为新文件名。

    返回值:修改文件名成功则返回0,否则返回-1。

    重命名文件:

    如果newname指定的文件存在,则会被删除。
    如果newname与oldname不在一个目录下,则相当于移动文件。
    重命名目录:

    如果oldname和oldname都为目录,则重命名目录。
    如果newname指定的目录存在且为空目录,则先将newname删除。
    对于newname和oldname两个目录,调用进程必须有写权限。
    重命名目录时,newname不能包含oldname作为其路径前缀。例如,不能将/usr更名为/usr/foo/testdir,因为老名字( /usr/foo)是新名字的路径前缀,因而不能将其删除。
    getcwd

    #include <unistd.h>

    char * getcwd(char * buf, size_t size);

    函数说明:getcwd()会将当前的工作目录绝对路径复制到参数buf 所指的内存空间,参数size 为buf 的空间大小。

    在调用此函数时,buf 所指的内存空间要足够大。若工作目录绝对路径的字符串长度超过参数size 大小,则返回NULL,errno 的值则为ERANGE。
    倘若参数buf 为NULL,getcwd()会依参数size 的大小自动配置内存(使用malloc()),如果参数size 也为0,则getcwd()会依工作目录绝对路径的字符串程度来决定所配置的内存大小,进程可以在使用完次字符串后利用free()来释放此空间。

  • 相关阅读:
    React 构建方法总结
    集思广益 (一)
    C#方法调用
    C# Hello World 实例
    C# 环境
    C# 简介
    对象类型的本地写入---plist文件创建以及读取
    正则判断 手机邮箱的正确格式
    数组去重
    Base64编码
  • 原文地址:https://www.cnblogs.com/13224ACMer/p/6384511.html
Copyright © 2011-2022 走看看