一.获取文件的属性:stat、fstat 和lstat 函数

#include <sys/types.h>
#include <sys/stat.h>
int stat (const char * pathname  ,struct stat * buf ) ;
int fstat (int filedes  ,struct stat *buf );
int lstat (const char *file_name ,struct stat *buf ) ;

三个函数的返回:若成功则为 0,若出错则为- 1

给定一个pathname ,stat 函数返回一个与此命名文件有关的信息结构, fstat 函数获得已在描述符filedes 上打开的文件的有关信息。lstat 函数类似于stat ,但是当命名的文件是一个符号连接时,lstat 返回该符号连接的有关信息,而不是由该符号连接引用的文件的信息。 (当以降序遍历目录层次结构时,需要用到 lstat。)

使用 stat 函数最多的可能是 ls -l命令,用其可以获得有关一个文件的所有信息。

二.设置文件属性

1.chmod和fchmod函数
这两个函数使我们可以更改现存文件的存取许可权。
#include <sys/types.h>
#include <sys/stat.h>
int chmod (const char *pathname ,mode_t mode ) ;
int fchmod (int filedes ,mode_t mode ) ;
两个函数返回:若成功则为 0,若出错则为- 1
chmod 函数在指定的文件上进行操作,而 fchmod 函数则对已打开的文件进行操作。
 


2.chown, fchown和lchown函数

chown 函数可用于更改文件的用户 ID和组ID。
#include <sys/types.h>
#include <unistd.h>
int chown (const char *pathname ,uid_towner ,gid_tgroup ) ;
int fchown ( int filedes, uid_t owner, gid _ t  group) ;
int lchown ( const char * pathname, uid_t owner, gid_t group) ;
三个函数返回:若成功则为 0,若出错则为- 1
除了所引用的文件是符号连接以外,这三个函数的操作相类似。在符号连接情况下, lchown 更改符号连接本身的所有者,而不是该符号连接所指向的文件。

3.文件截短truncate和ftruncate
有时我们需要在文件尾端处截去一些数据以缩短文件。将一个文件的长度截短为 0是一个特例,用O_TRUNC标志可以做到这一点。为了截短文件可以调用函数 truncate和ftruncate 。
#include <sys/types.h>
#include <unistd.h>
int truncate ( const char * pathname, off_t length) ;
int ftruncate ( int filedes, off_t length) ;
两个函数返回;若成功则为 0,若出错则为- 1
这两个函数将由路径名 pathname或打开文件描述符 filedes指定的一个现存文件的长度截短为length。如果该文件以前的长度大于 length,则超过length以外的数据就不再能存取。如果以前的长度短于length,则其后果与系统有关。如果某个实现的处理是扩展该文件,则在以前的文件尾端和新的文件尾端之间的数据将读作 0 (也就是在文件中创建了一个空洞 )。

4.utime函数
一个文件的存取和修改时间可以用 utime函数更改。
#include <sys/types.h>
#include <utime.h>
int utime ( const char * pathname, const struct utimbuf *buf) ;
返回:若成功则为 0,若出错则为- 1
此函数所使用的结构是:
struct utimbuf {
time_t actime;      /*access time*/
time_t modtime;        /*modification time*/
}
此结构中的两个时间值是日历时间
此函数的操作以及执行它所要求的优先权取决于 times参数是否是NULL.
(1) 如果times是一个空指针,则存取时间和修改时间两者都设置为当前时间。为了执行此操作必须满足下列两条件之一:
      ( a )进程的有效用户 I D必须等于该文件的所有者 I D
      ( b )进程对该文件必须具有写许可权。
(2) 如果times非空指针,则存取时间和修改时间被设置为 times所指向的结构中的值。此时,进程的有效用户I D必须等于该文件的所有者 I D,或者进程必须是一个超级用户进程。对文件只具有写许可权是不够的。
注意,我们不能对更改状态时间 st_ctime指定一个值,当调用 utime 函数时,此字段被自动更新。

5.umask函数
至此我们已说明了与每个文件相关联的 9个存取许可权位,在此基础上我们可以说明与每个进程相关联的文件方式创建屏蔽字。
umask函数为进程设置文件方式创建屏蔽字,并返回以前的值。 (这是少数几个没有出错返回的函数中的一个。)
#include <sys/types.h>
#include <sys/stat.h>
mode_t  umask (mode_t cmask );
返回:以前的文件方式创建屏蔽字
其中,参数cmask由9个常数( S_IRUSR , S_IWUSR 等)逐位“或”构成的。在进程创建一个新文件或新目录时,就一定会使用文件方式创建屏蔽字

三.目录操作
1.目录的创建 mrdir
#include <sys/types.h>
#include <sys/stat.h>
int mkdir (const char * pathname ,mode_t mode );
函数执行成功返回0 ,当有错误时返回-1,错误代码存入errno中,详细的错误代码说明请参考man手册
mkdir创建一个新的空目录,空目录中会自动创建...和..目录项,所创建的目录的存取许可权由 mode( mode &~umask )指定。
新创建目录的uid(所有者)与创建该目录的进程的 uid 一致。如果父目录设置了 st_gid位,则新创建的的目录设置也设置在 st_gid 位(目录被设置该位后,任何用户在此目录下创建文件的组id 与该目录的组id 相同)。

2.目录的删除,
#include <unistd.h>
int rmdir (const char * pathname );
函数执行成功返回0 ,当有错误时返回-1,错误代码存入errno中,详细的错误代码说明请参考man手册

3.获取当前目录 getwd
我们需要一个函数,它从当前工作目录开始,找到其上一级的目录,然后读其目录项,直到该目录项中的 i节点编号数与工作目录 i节点编号数相同,这样地就找到了其对应的文件。按照这种方法,逐层上移,直到遇到根,这样就得到了当前工作目录的绝对路径名。函数getcwd就是提供这种功能的。
#include <unistd.h>
char * getcwd ( char* buf, size_t size);
char * get_current_dir_name (void);
char * getwd(char * buf);
返回:若成功则为 buf, 或返回自动配置的字符串指针,若出错则为 NULL
 getcwd 向此函数传递两个参数,一个是缓存地址 buf,另一个是缓存的长度 size。该缓存必须有足够的
长度以容纳绝对路径名再加上一个 null 终止字符,否则返回出错,倘若buf 为null ,getcwd()会根据参数size 的大小自动分配内存(使用malloc()),如果size也是0,则getcwd会跟据工作目录提供的绝对路径的字符串长度来决定配置的内存大小进程可以在使用完字符串后利用free()来释放空间;

4.设置工作目录 chdir
#include <unistd.h>
int chdir (const char * path);
int fchair (int fd);
两个函数的返回:若成功则为 0,若出错则为- 1
在这两个函数中,可以分别用 pathname或打开文件描述符来指定新的当前工作目录。

5.获取目录信息opendir ,readdir 和 closedir函数
#include <sys/types.h>
#include <dirent.h>
DIR * opendir( const char * pathname) ;
返回:若成功则为指针,若出错则为 NULL;
opendir用于打开一个目录

#include <sys/types.h>
#include <dirent.h>
struct dirent * readdir ( DIR *dir) ;
返回:若成功则为指针,若在目录尾或出错则为 NULL
readdir用于读取目录中的内容

struct dirent * readdir
{    
    long d_ino;
    off_t d_off;
    unsigned short d_reclen /* length of this d_name */
    char d_name [NAME_MAX +1] /* file name (null - terminated ) */
}

#include <sys/types.h>
#include <dirent.h>
int closedir ( DIR *dir);
返回:若成功则为 0,若出错则为- 1
closedir用于关闭一个已经打开的目录

转载于:https://www.cnblogs.com/kaylee-lr/p/4668674.html

linux c 笔记 文件(三)相关推荐

  1. Linux学习笔记-文件权限与路径

    Linux学习笔记-文件与目录 目前从电子信息科学与技术转到了计算机专业,因此想趁着大四比较闲的时候补一些计算机的知识.我想说:你好,生活[斜眼笑]!愿生活温柔以待!哈哈,这是我写的第一篇博客,谨以此 ...

  2. Linux学习笔记 文件服务Vsftp详细介绍

    Linux学习笔记 文件服务Vsftp详细介绍 知识点: 1.FTP使用TCP连接和TCP端口 2.在进行通信时,FTP需要建立两个TCP连接: 一个用于控制信息,TCP端口号缺省为21 一个用于数据 ...

  3. Cty的Linux学习笔记(三)

    Linux学习笔记--第三篇 (再次声明:该笔记只作为学习记录及参考) 概念: 相对路径:依赖于当前文件或目录的路径 绝对路径:依赖于根目录的路径 命令(command): cd:变更用户所在的目录, ...

  4. Linux学习笔记(三)(安装软件)

    Linux学习笔记(三) 概述 安装软件一般有三种方法: rpm RPM 是 Red Hat Package Manager 的缩写,本意是Red Hat 软件包管理,顾名思义是Red Hat 贡献出 ...

  5. 查看linux 文件创建时间,在Linux下查看文件三种时间

    原标题:在Linux下查看文件三种时间 在Linux下,文件包含三种时间属性,分别为: atime(access time):最近访问文件内容时间(Last Access Time). mtime(m ...

  6. Linux学习笔记——文件的查找与检索

    文章目录 文件的查找 按照文件名搜索 按照文件大小进行搜索 按照修改时间搜索 按照权限搜索 按照所有者和所属组搜索 按照文件类型搜索 逻辑运算符 其他选项 文件的检索 在当前目录查找 递归查找 反向查 ...

  7. Linux学习笔记(三.文件内容命令其他命令)

    P36~41 cat和more的区别:当文件内容很多时,建议用more,因为more可以分屏显示:而文件内容较少时,建议使用cat,cat是一次显示所有文件内容. 如下图 -b 选项不给空行编号 如下 ...

  8. Linux学习笔记(三)文本相关,文件权限,vim

    文章目录 cat 显示文本 tac 倒序显示 less 分屏显示文本 more 分页显示文件 head 显示文件的前面的内容 tail 显示文件的后面的内容 cut 切割 paste 合并 wc 用来 ...

  9. linux学习笔记(三):文件系统结构

    待补充 转载于:https://www.cnblogs.com/sleepyy/p/3389874.html

最新文章

  1. 20.27分发系统介绍;20.28expect脚本远程登录;20.29expect脚本远程执行命令;20.30expect脚本传递参数...
  2. redis数据类型_认识Redis与Redis的数据类型
  3. python经典一百道习题(转自奶酪博客)
  4. 惠普计算机笔记本打印机官网,HP2621打印机驱动
  5. AjaxPro使用说明
  6. “我用 72 小时复刻了一个 ClubHouse”
  7. c#日期转换周几_C#根据日期计算星期几的实例代码
  8. android-实现一个简单的视频弹幕,Android未来路在何方
  9. 使用inno setup制作安装包
  10. linux 设置注释颜色,【转】vim注释和光标高亮行列的颜色设置
  11. 分布式架构网络通信——netty
  12. Python中的缩进(unindent)问题
  13. 持续学习:(Elastic Weight Consolidation, EWC)Overcoming Catastrophic Forgetting in Neural Network
  14. vue cle新建vue项目
  15. 【Lilishop商城】No3-3.模块详细设计,会员信息(会员基本信息)、店铺设置(店铺信息、配送模板)的详细设计
  16. 堆排序和快排与归并排序
  17. Python基础项目:学生信息管理系统
  18. 类与对象(一)----什么是类和对象
  19. [HNOI2004]打鼹鼠 简单DP
  20. IntelliJ IDEA的这个接口调试工具真是太太太太太好用了!

热门文章

  1. 打破认知:程序设计 #x3D; 算法 + 数据结构?
  2. SQL SERVER全面优化-------索引有多重要?
  3. 你真正了解什么是 Cloud Native 吗?
  4. Git系列之git log高级命令
  5. IIS6.0 web.config
  6. Android中的资源访问
  7. UTF-8 BOM(EF BB BF)
  8. 30幅非常漂亮的微距摄影作品欣赏
  9. 简述ospf的各种报文
  10. 利用组策略防止计算机访问共享资源