1. Linux文件操作相关函数

stat函数 :获取文件属性(从inode上获取)
                返回值:
                    成功:0
                    失败:-1
                文件属性:
                    struct stat {
                    dev_t         st_dev;       //文件的设备编号
                    ino_t         st_ino;       //节点
                    mode_t        st_mode;      //文件的类型和存取的权限
                    nlink_t       st_nlink;     //连到该文件的硬连接数目,刚建立的文件值为1
                    uid_t         st_uid;       //用户ID
                    gid_t         st_gid;       //组ID
                    dev_t         st_rdev;      //(设备类型)若此文件为设备文件,则为其设备编号
                    off_t         st_size;      //文件字节数(文件大小)
                    blksize_t     st_blksize;   //块大小(文件系统的I/O 缓冲区大小)
                    blkcnt_t      st_blocks;    //块数
                    time_t        st_atime;     //最后一次访问时间
                    time_t        st_mtime;     //最后一次修改时间
                    time_t        st_ctime;     //最后一次改变时间(指属性)
                    };
                特性:能够穿透(跟踪)符号链接  (穿透的命令举例:vi)

lstat函数
                特性:不穿透(跟踪)符号链接 (不穿透的命令举例:ls -l 、rm)
            区别:对软链接,stat返回软链接对应文件的大小。
                lstat返回软链接的大小。
        access函数:测试指定文件是否拥有某种权限
                原型:int access(const char *pathname, int mode);
                    pathname --> 文件名
                    mode --> 权限类别
                        R_OK 是否有读权限
                        W_OK 是否有写权限
                        X_OK 是否有执行权限
                        F_OK 测试一个文件是否存在
                返回值:
                    0 --> 所有欲查核的权限都通过了检查
                    -1 --> 有权限被禁止
        chmod函数:改变文件的权限
                原型:int chmod( const char *filename, int pmode );
                    filename --> 文件名
                    pmode --> 权限 必须是一个8进制数
                返回值:
                    0 --> 改变成功
                    -1 --> 失败
        chown函数:改变文件的所有者
                原型:int chown(const char *path, uid_t owner, gid_t group);
                    uid_t owner-->用户名
                    gid_t group-->组名
                    (vi /etc/passwd有对应的数字,每一列的含义可以man 5 passwd查看)
                返回值:
                    0 --> 成功
                    -1 --> 失败            
        truncate函数:将参数path 指定的文件大小改为参数length             指定的大小。如果原来的文件大小比参数length大,则超过的部分会被删去。
                原型:int truncate(const char *path, off_t length);
                    path --> 文件路径
                    length --> 指定的文件大小
                返回值:
                    0 --> 执行成功
                    -1 --> 执行失败
                原文件长度 100
                第二个参数指定长度为 20 -->    文件截断
                原文件长度 100
                第二个参数指定长度为 300 -> 文件被拓展
        链接函数:
            link函数:创建一个硬链接
                原型:int link(const char *oldpath, const char *newpath);
            symlink函数:创建一个软连接
            readlink函数:读软连接对应的文件名,不是读内容
            unlink函数:如果想通过调用这个函数来成功删除文件,你就必须拥有这个文件的所属目录的写和执行权限。
                使用:
                    1. 如果是符号链接,删除符号链接
                    2. 如果是硬链接,硬链接数减1,当减为0时,释放数据块和inode
                    3. 如果文件硬链接数为0,但有进程已打开该文件,并持有文件描述符,则等该进程关闭该文件时,kernel才真正去删除该文件。利用该特性创建临时文件,先open或creat创建一个文件,马上unlink此文件,直到关闭该文件时,该文件才会被删除。
        rename函数:文件重命名
            函数原型:int rename(const char *oldpath, const char *newpath);

2. Linux目录操作相关函数

chdir 函数:修改当前进程的路径
            原型:函数原型:int chdir(const char *path);
        getcwd 函数:获取当前进程工作目录
            函数原型:char *getcwd(char *buf, size_t size);
        mkdir 函数:创建目录
            注意:创建的目录需要有执行权限,否则无法进入目录
            函数原型:int mkdir(const char *pathname, mode_t mode(0777 8进制));
        rmdir 函数:删除一个空目录
            函数原型:int rmdir(const char *pathname);
        opendir 函数:打开一个目录 man 3 opendir (第三章)
            函数原型:DIR *opendir(const char *name);
            返回值:
                DIR结构指针,该结构是一个内部结构,保存所打开的目录信息,作用类似于FILE结构
                函数出错返回 NULL
        readdir 函数:读目录
            函数原型:struct dirent *readdir(DIR *dirp);
            返回值:
                成功返回一条记录项:
                    struct dirent
                    {
                        ino_t d_ino;               // 此目录进入点的inode
                        ff_t d_off;                // 目录文件开头至此目录进入点的位移
                        signed short int d_reclen; // d_name 的长度, 不包含NULL 字符
                        unsigned char d_type;      // d_name 所指的文件类型
                        har d_name[256];           // 文件名
                    };
                失败返回NULL
        closedir 函数:关闭目录

3. fcntl 函数:改变已经打开的文件的属性,根据文件描述符来操作文件的状态 -- #include <fcntl.h>

函数原型:    int fcntl(int fd, int cmd);
                    int fcntl(int fd, int cmd, long arg);
                    int fcntl(int fd, int cmd, struct flock *lock);

例如:打开文件的时候: 只读
        修改文件的属性: 添加追加 O_APPEND
            flag = fcntl(fd,F_GETFL,0);
            flag |= O_APPEND;
            fcntl(fd,F_SETFL,flag);

4. dup, dup2函数

dup 函数:复制现有的文件描述符
            原型:int dup(int oldfd);
            返回值:的是文件描述符表中没有被占用的最小文件描述符
        dup2 函数:把oldfd复制文件描述符newfd,
                1->如果new是一个被打开的文件描述符,在拷贝前先关掉new
                2->如果old和new 是同一个,不会关掉new,直接返回的还是旧的文件描述符
            原型:int dup(int oldfd,int newfd);
            返回值:的是文件描述符表中没有被占用的最小文件描述符

解决gcc编译过程中c99语法报错的问题
~/.bashrc
alias gcc='gcc -std=gnu99'

索引节点inode:保存的其实是实际的数据的一些信息,这些信息称为“元数据”(也就是对文件属性的描述)。
例如:文件大小,设备标识符,用户标识符,用户组标识符,文件模式,扩展属性,文件读取或修改的时间戳,
链接数量,指向存储该内容的磁盘区块的指针,文件分类等等。
( 注意数据分成:元数据+数据本身 )

注意inode怎样生成的:每个inode节点的大小,一般是128字节或256字节。inode节点的总数,在格式化时就给定
(现代OS可以动态变化),一般每2KB就设置一个inode。一般文件系统中很少有文件小于2KB的,所以预定按照2KB分,
一般inode是用不完的。所以inode在文件系统安装的时候会有一个默认数量,后期会根据实际的需要发生变化。

注意inode号:inode号是唯一的,表示不同的文件。其实在Linux内部的时候,访问文件都是通过inode号来进行的,
所谓文件名仅仅是给用户容易使用的。当我们打开一个文件的时候,首先,系统找到这个文件名对应的inode号;然后,
通过inode号,得到inode信息,最后,由inode找到文件数据所在的block,现在可以处理文件数据了。

inode和文件的关系:当创建一个文件的时候,就给文件分配了一个inode。一个inode只对应一个实际文件,
一个文件也会只有一个inode。inodes最大数量就是文件的最大数量。

Linux学习笔记-基本操作5的更多相关文章

  1. Linux学习笔记-基本操作1

    1>. 命令解析器2>. Linux快捷键3>. Linux 系统目录结构4>. 用户目录5>. 文件和目录操作6>. 文件和目录的属性7>. 文件权限, 用 ...

  2. Linux学习笔记-基本操作4

    1. gdb调试2. makefile的编写3. 系统IO函数 1. gdb调试:        1. 启动gdb + 可执行文件        2. 查看代码:                l== ...

  3. Linux学习笔记-基本操作3

    1. vim编辑器的使用2. gcc编译器3. 静态库的制作 -- lib4. 动态库的制作    -- dll vi -- vimvim是从vi发展过来的一款文本编辑器vi a.txt前提: 安装了 ...

  4. Linux学习笔记-基本操作2

    1. 压缩包管理2. 进程管理3. 网路管理4. ftp服务器搭建5. nfs服务器搭建6. ssh服务器7. scp命令8. 其他命令9. 关机重启 1. 压缩包管理 1>. 屌丝版:不能对目 ...

  5. 20155303狄惟佳预备作业三Linux学习笔记

    20155303狄惟佳预备作业三Linux学习笔记 初次接触Ubuntu系统以及Linux内核,了解了其产生的历史,从感性来讲,深深吸引我的是其中蕴含的珍贵的开源精神,以及Stallman等人对&qu ...

  6. Linux 学习笔记 1 使用最小的系统,从分区安装系统开始

    我们常用的linux系统在安装过程中大多都省略了对系统进行分区的操作,以至于后期,不了解什么是分区以及分区当中最基本的一些概念, 我们不说最细的知识,只求了解这个过程,那直接步入正题,开始第一节的学习 ...

  7. Linux 学习笔记 5 文件的下载、压缩、解压、初步认识yum

    写在前面 上节我们通过简单的几组命令,已经完全的实现了文件的移动.删除.更名.以及复制,我们最常用的基本玩法,本节将带着大家学习压缩.解压的相关步骤. Linux 学习笔记 4 创建.复制.移动.文件 ...

  8. Linux 学习笔记

    Linux学习笔记 请切换web视图查看,表格比较大,方法:视图>>web板式视图 博客园不能粘贴图片吗 http://wenku.baidu.com/view/bda1c3067fd53 ...

  9. linux学习笔记2-linux的常用命令

    第一篇博客:linux学习笔记1-ubuntu的安装与基本设置 之中,已经介绍了如何安装linux操作系统,以及一些基本的设置修改. 本篇博客主要介绍linux中的一些常用的终端命令 ======== ...

随机推荐

  1. one or more

    想到以后如果一直都是这样,那么以后的生活是多么多么可怕啊. 感觉毫无期盼.没有意义. 如果变得理所当然那是多么多么让人害怕的事,吓得让人发抖. 所以在以后漫长的岁月里,还是一个人吧 如果相互看不惯,感 ...

  2. windows下如何修改mysql的端口号

  3. ThinkPHP getBy动态查询

    getBy动态查询 ThinkPHP getBy动态查询是一个魔术方法,可以根据某个字段名称动态得到对应的一条数据记录. 根据用户名(username)查询对应的用户资料记录: public func ...

  4. ios 基础知识篇 堆和栈的区别

    前言 堆和栈是什么?有什么区别?是干嘛的? 内存管理 移动设备的内存及其有限,每一个APP所能占用的内存是有限制的 (吐槽一下:iPhone6s还是16G起步,还好我也买不起->_-> 扯 ...

  5. 2019.01.19 bzoj3653: 谈笑风生(长链剖分优化dp)

    传送门 长链剖分优化dpdpdp水题. 题意简述:给一棵树,mmm次询问,每次给一个点aaa和一个值kkk,询问满足如下条件的三元组(a,b,c)(a,b,c)(a,b,c)的个数. a,b是c的祖先 ...

  6. java学习路线图(2018年最新版)

    最近有些网友问我如何自学 Java 后端,还有些是想从别的方向想转过来,但都不太了解 Java 后端究竟需要学什么,究竟要从哪里学起,哪些是主流的 Java 后端技术等等,导致想学,但又很迷茫,不知从 ...

  7. 乌龙之MySQL slave IO status:connecting

    搭建了一个主从,状态一直如下: 检查错误日志报错如下: review搭建过程,语法并没有问题. 检查用户及网络,也没有问题: so?what is the cause ? 等等....貌似上面搭建用的 ...

  8. WebGIS实现在线要素编辑之ArcGIS Server 发布Feature Service 过程解析

    WebGIS实现在线要素编辑之ArcGIS Server 发布Feature Service 过程解析 FeatureService也称要素服务,其最大的好处就是支持在线要素编辑,并将编辑同步更新到后 ...

  9. Linux磁盘满问题分析

    线上一台Linux服务器最近经常磁盘根分区满告警,但不是普通的日志文件或数据文件过多过大,现象如下: 1)执行“df -h”查看各分区空间的使用情况[root@XEN64 /]# df -hFiles ...

  10. JQuery EasyUI 1.5.1 美化主题大包

    https://my.oschina.net/magicweng/blog/833266