关于linux文件类型总结——APUE学习笔记(3)

原创 2015年11月20日 20:09:00

在linux这个一切皆文件的世界中,对文件的理解很是重要,自己将apue中的文件类型总结了以下,希望对大家有所帮助。


一. linux下文件系统大概包括普通文件目录文件块特殊文件字符特殊文件FIFO套接字符号链接七种


(1).普通文件(regular file):


a. linux下最常用的文件类型,该类文件可以是文本文件或者二进制文件,两者对unix内核来说并无具体区别。


(2). 目录文件(directory file):


a. 该类文件信息中包含了其他文件的名字以及指向这些文件的指针。

b. 目录文件的读写权限有点特殊:
–> 当任意一个进程对该目录享有读权限时,他都可以读到该目录的内容。
–> 但只有内核对目录可以直接进行写操作,进程必须通过APUE第四章介绍的函数才可以更改目录信息。


(3). 块特殊设备(blocks special file):


a. 块设备提供对设备(磁盘等)带缓冲的访问,每次访问以固定长度为单位进行。
b. FreeBSD不再支持块设备,而是以(4)文件类型对待。


(4). 字符特殊文件(character special file):


a. 字符特殊文件与块特殊文件都是描述设备的文件类型。
b. 相对于块特殊设备,该类型为不带缓冲访问。
c. 每次访问长度可以改变。
d. 系统中所有的设备都属于(3), (4)。


(5). FIFO(有名管道named pipe):


a. 用于进程间通信。
b. 传送门:http://blog.csdn.net/riyadh_linux/article/details/49826543


(6). 套接字(socket):


a. 用于进程间网络通信或者一台宿主机上进程间的非网络通信。



a. 符号链接分为软链接和硬链接,软链接相当于windows下的快捷方式;而硬链接则相当于拷贝动作,并且回同步时间戳。


二. 类型操作:


(1). 上述个文件类型都包含在stat结构的st_mode成员中(传送门:http://blog.csdn.net/riyadh_linux/article/details/49935819)。文件类型可以用以下宏来确定:


文件类型
S_ISREG() 普通文件
S_ISDIR() 目录文件
S_ISCHR() 字符特殊文件
S_ISBLK() 块特殊文件
S_ISFIFO() 管道或FIFO文件
S_ISLINK() 符号链接
S_ISSOCK() 套接字
其参数都是stat结构中st_mode成员 文件中的宏

POSIX.1允许将进程间通信说明为文件,所以我们可以用stat来确定IPC对象的类型:

类型
S_TYPEISMQ() 消息队列
S_TYPEISSEM() 信号量
S_TYPEISSHM() 共享内存对象
其参数不是stat中st_mode成员,而是指向stat结构的指针 IPC类型的宏

三. 下面有一个APUE的原例子,其作用是用来针对命令行参数来打印其文件类型的:

#include <apue.h>

int main(int argc, char **argv)
{
    int    i       ;      //游标变量
    struct stat buf;      //stat结构体成员
    char  *ptr     ;      //用来存储得到类型信息指针

    //参数判断,如果参数小于2个,退出
    if(2 > argc){
        printf("Usage:%s <filename>", argv[0]);
        return -1;
    }

    //循环遍历外部传入文件,并将文件信息记录在buf指向的结构体中
    for(i = 1; i <= argc; ++i){
        printf("%s:", argv[i]);
        if(0 > lstat(argv[i], &buf)){
            err_ret("lstat erro!");
            continue;
        }

        //比对文件buf.st_mode值
        if(S_ISREG(buf.st_mode)){
            ptr = "regular";
        }else if(S_ISDIR(buf.st_mode))(
            ptr = "diretory";
        }else if(S_ISCHR(buf.st_mode))(
            ptr = "character special";
        }else if(S_ISBLK(buf.st_mode))(
            ptr = "block special";
        }else if(S_ISFIFO(buf.st_mode))(
            ptr = "fifo";
        }else if(S_ISLINK(buf.st_mode))(
            ptr = "symbolic link";
        }else if(S_ISSOCK(buf.st_mode))(
            ptr = "socket";
        }else{
            ptr = "** unkown mode **";
        }

        //输出文件类型信息
        printf("%s\n", ptr);
    }

    return 0;
}

其运行结果为:

[root@localhost pthread]# ./a.out /etc/passwd /etc /dev/log\
> /dev/tty /var/lib/oprofile/opd_pipe /dev/sr0 /dev/cdrom
/dec/passwd: directory
/dev/log: socket
/dev/tty: character special
/var/lib/oprofile/opd_pipe: fifo
/dev/sr0: block special
/dev/cdrom: symbolic link

============end=============
小菜总结,如有不当,欢迎指出

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

学习笔记12——Linux中的文件类型

1.概述 (1)  Windows系统通过扩展名来区分文件类型,而linux中文件扩展名和文件类型没有关系 (2)   为了便于区分并且兼容用户使用windows的习惯,我们也会采用扩展名来表示lin...

Linux学习笔记2——stat与获取文件类型

1,stuct stat 一个文件的常用信息,包括:权限、文件类型、文件所有者、文件大小、文件改动时间等信息都存储在一个结构体中,即struct stat。 这个结构体定义在stat.h头文件中。 基...

Linux学习笔记[3] - Linux系统结构(磁盘分区、文件系统、文件类型)

磁盘及分区   设备管理 在 Linux 中,每一个硬件设备都映射到一个系统的文件,对于硬盘、光驱等 IDE 或SCSI 设备也不例外。Linux 把各种 IDE 设备分配了一个由hd 前缀组成的文...

Linux学习笔记--文件类型和权限

如图:当我们在用 ll (ls -l) 命令查看文件的详细信息时,我们都会看到如红框内的这么一串字符,这串字符就代表了对应文件权限。那么让我们来解释一下这些权限:◇ - rw- r-- r-- (权限...

Linux运维学习笔记之六:Linux中的文件类型、属性、正则表达式、权限体系

第十章 Linux中的文件类型 一、扩展名:    windows利用文件扩展名来区分文件类型    Linux中文件扩展名和文件类型没有关系     为了容易区分和兼容用户使用windows...

Linux笔记 ——KDE &GNOME安装分区与文件类型

对于开发者来说CentOS+GNOME无疑是一个非常不错的选择,为什么我会选择这个?主要有几方面的原因:①CentOS作为服务器几乎是极大多数公司的选择;②CentOS表现出极大的稳定性;③即使在05...

c语言文件IO库函数——APUE学习笔记(1)

大多数函数只需要五个函数实现IO操作:open, read, write, lseek, close. 一. 文件描述符: 文件描述符时一个非负整数(0~OPEN_MAX - 1).当打开现有文...

文件和目录之stat族函数<stat | fstat | lstat | fstatat>——APUE学习笔记(2)

一. 函数原型及具体数据结构:#include int stat(const char *retrict pathname, struct stat *restrict buf); int fstat...

APUE学习笔记——5缓冲Buffering、流、文件对象

缓冲的几个基本概念 缓冲的作用:减少系统read和write的次数。 全缓冲 系统标准I/O缓冲区被写满时才进行真正的I/O操作。 磁盘文件一般使用全缓冲 ...

APUE学习笔记3——第五章——标准I/O库

APUE学习笔记3——第五章——标准I/O库
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)