Linux下C编程:文件类型和属性

文件是有名字的一组相关信息的集合,在Linux 系统中,文件的准确定义是不包含有任何其他结构的字符流。通俗地说,就是文件中的字符与字符之间除了同属于一个文件之外,不存在任何其他的关系。文件中字符的关系,是由使用文件的应用程序来建立和解释的。

每一个文件都具有特定的属性。Linux 系统的文件属性比较复杂,主要包括文件类型和文件权限两个方面。

1.文件类型

Linux下的文件可以分为5 种不同的类型。它们是普通文件、目录文件、链接文件、设备文件和管道文件。下面给出它们的具体介绍。

(1)普通文件

普通文件也称正规文件,是最常见的一类文件,也是最常使用到的一类文件。其特点是不包含有文件系统的结构信息。通常所接触到的文件,包括图形文件、数据文件、文档文件、声音文件等等都属于普通文件。这种类型的文件按其内部结构又可细分为两个文件类型:文本文件和二进制文件。

文本文件:文本文件是以字符(通常是ASCII 码)表示的,是以行为基本结构的信息存储方式。

二进制文件:二进制文件是按信息在内存中的格式表示的,它通常不能直接查看,而必须使用相应的软件。

(2)目录文件

目录文件是用于存放文件名及其相关信息的文件。是内核组织文件系统的基本节点。目录文件可以包含下一级目录文件或普通文件。

注:在Linux 中,目录文件是一种文件。但Linux 的目录文件和其他操作系统中的“目录”的概念不同,它是Linux 文件的一种。当然,在实际使用时也可以不仔细区分这两种说法,甚至在本书的具体叙述中,有时就将目录文件简称为目录,但要注意它们在概念上的不同。

(3)链接文件

链接文件是一种特殊的文件。它实际上是指向一个真实存在的文件的链接。比如用户要在一个目录文件中使用其他目录文件下的文件时,并不需要将其复制过来,而只需在此目录中建立一个链接文件指向所要调用的文件。在具体使用时,并不会感觉到它们有什么不同。根据链接对象的不同,链接文件又可以细分为硬链接文件和符号链接文件。

(4)设备文件

设备文件是Linux 中最特殊的文件。正是由于它的存在,使得Linux 系统可以十分方便的访问外部设备。Linux 系统为外部设备提供一种标准接口,将外部设备视为一种特殊的文件。用户可以像访问普通文件一样访问外部设备。这就使Linux 系统可以很方便的适应不断发展的外部设备。通常Linux 系统将设备文件放在/dev 目录下。设备文件使用设备的主设备号和次设备号来指定某外部设备。主设备号用于说明设备类型,次设备号用于说明具体设备。例如,以IDE 硬盘为第一主盘,它的第三个分区的设备文件就是/dev/hda3。其中hd 是主设备号,a3 是次设备号。根据访问数据方式的不同,设备文件又可以细分为两种类型:块设备文件和字符设备文件。

块设备文件:块设备文件是以固定长度的块访问数据的。

字符设备文件:字符设备文件是以指定字符(通常是一个字符)访问数据的。

大多数外部设备都提供两种访问方式。但对每一种设备来说,都有其最佳的访问方式。

注:在设备文件中有一个极其特殊的文件/dev/null。所有放入这一设备的数据都将不再存在。

可以将它看成是删除操作。

(5)管道文件

管道文件也是一种很特殊的文件。主要用于不同进程间的信息传递。当两个进程间需要进行数据或信息传递时,可以通过管道文件。一个进程将需传递的数据或信息写入管道的一端,另一进程则从管道的另一端取得所需的数据或信息。通常管道是建立在高速缓存中的。采用先进先出的规定处理其中的数据。可以细分为有名管道和无名管道两种。

2.文件权限

Linux系统是一个典型的多用户系统,不同的用户处于不同的地位。为了保护系统的安全性,Linux 系统对不同用户访问同一文件的权限做了不同的规定。对于一个Linux 系统中的文件来说,它的权限可以分为三种:读的权限、写的权限和执行的权限。分别用r、w 和x 表示。不同的用户具有不同的读、写和执行权限。对于一个文件来说,它都有一个特定的所有者,也就是对文件具有所有权的用户。同时,由于在Linux 系统中,用户是按组分类的,一个用户属于一个或多个组。所以文件所有者以外的用户又可以分为文件所有者的同组用户和其他用户。因此Linux 系统按文件所有者、文件所有者同组用户和其他用户三类规定不同的文件访问权限。

注:系统管理员root 用户是一个非常特别的用户,此用户对系统具有最高的控制权。对于系统中的所有文件root 用户都有读、写以及执行的权限。

查看全套文章:http://www.bianceng.cn/Programming/C/201212/34807.htm

时间: 2024-08-29 13:33:13

Linux下C编程:文件类型和属性的相关文章

Linux下C编程-----文件操作(1) 通过系统调用简单操作标准输入、标准输出、标准错误

Linux的 C系统调用操作  ,下面我们就来练习下 简单的系统调用操作 read系统调用测试 /************************************************************************* > File Name: read.c > Author: > Mail: > Created Time: Tue 10 Feb 2015 01:23:58 AM PST **********************************

Linux下C编程-----IO/文件操作 模拟linux ls程序显示文件系统树形结构(2)

Linux下的IO/文件操作练习,知识虽然简单 但是往往基础容易被忽略,偶尔的练习是有必要的.        练习printf /************************************************************************* > File Name: printf.c > Author: > Mail: > Created Time: Wed 11 Feb 2015 01:08:15 AM PST ****************

Linux下多线程编程(C语言)

Linux下多线程编程(C语言) 2.6内核开始使用NPTL(Native POSIX Thread Library)线程库,这个线程库有以下几个目标: POSIX兼容,都处理结果和应用,底启动开销,低链接开销,与Linux Thread应用的二进制兼容,软硬件的可扩展能力,与C++集成等. 这里的线程是指用户空间的线程操作 一.线程相关操作 1.1  pthread_t      pthread_t 在头文件  /usr/include/i386-linux-gnu/bits/pthreadt

Linux下c++编程中,STL模板的使用。

问题描述 Linux下c++编程中,STL模板的使用. Linux下c++编程,使用STL模板,为什么只识别#include 而不识别#include ? 程序中只要有#include 就会报无数多个错! 解决方案 难道c++标准模板库STL中没有包含queue,你可以去根目录去看看include头文件中有没有queue.h 解决方案二: STL头文件目录是否被include进项目中,如果自己写makefile的话,查看下INCLUDE的目录,如果IDE的话就查看下项目设置中的include选项

Linux下多进程编程(C语言)

Linux下多进程编程(C语言) 一.    进程简介 1.进程是程序的执行.程序是静态的,进程是动态的. 2.进程在内存中有三部分组成:数据段.堆栈段和代码段.          代码段:就是存放程序代码的数据,如果有数个进程运行同一个一个程序,那么它们就可以使用同一个代码段(代码段是可以共享的):          堆栈段:存放的是子程序的返回地址.参数以及程序的局部变量,主要是保存进程的执行的环境,这里用到了栈先进后出的特性,可以看做具有记忆上一次执行的环境.          数据段:存

Linux下控制(统计)文件的生成的C代码实现_C 语言

本文分享了Linux下控制(统计)文件的生成的C代码实现案例,供大家参考,具体内容如下 一.需求描述 不定时地在Linux机器下的某目录中放入文件,文件内容中包含了用户号码.起止时间等字段,现要求编写一程序来统计目前该目录中所有文件中的记录总条数及所有记录中的最早起始时间和最晚结束时间. 例如,该目录中有两个文件Test_1.txt和Test_2.txt,其中Test_1.txt文件内容为: 15696192591|15696192592|20151103 120909|20151103 201

C语言实现Linux下的socket文件传输实例_C 语言

本文实例讲述了C语言实现Linux下的socket文件传输.分享给大家供大家参考.具体如下: server.c如下: //////////////////////////////////// //服务器代码 /////////////////////////////////// //本文件是服务器的代码 #include <netinet/in.h> // for sockaddr_in #include <sys/types.h> // for socket #include &

Linux下网络编程read,write问题(C语言),求大神指点阿!!!

问题描述 Linux下网络编程read,write问题(C语言),求大神指点阿!!! zuijzuj.最近学习socket编程的时候调试代码出现了一些问题,求大神们指导阿!!!我要实现的功能是客户端输入两个操作数和一个运算符,在服务端进行运算再把结果返回到客户端.现在的bug是客户端输入第一个操作数的时候没问题,输入运算符的时候客户端可以通过write函数写入但是服务端读出的结果不是输入的运算符,客户端输入第二个操作数的时候write函数无法写入,这是缓冲区满了吗?缓冲区大小不是由内核自己决定的

Linux下Shell编程快捷键大全(日常整理)_linux shell

有时候,我们需要在 Bash 中重复执行先前的命令.你当然可以使用上方向键来查看之前曾经运行过的命令.但这里有一些更好的方式,例如,数量掌握以下的快捷键. 1) !!:重复执行上一条指令 2) !a:重复执行上一条以a为首的指令 3) !number:重复执行上一条在history表中记录号码为number的指令 4) !-number:重复执行前第number条指令 5) !$:表示获得上一条命令中的最后一项内容 6) 用Ctrl + r 组合键来进入历史搜索模式在history表中查询某条过

runtime-java 在linux 下调用 SH 文件 在windows 下调用 bat 执行后不能 看见进程

问题描述 java 在linux 下调用 SH 文件 在windows 下调用 bat 执行后不能 看见进程 public boolean execCmd(String[] cmds){Process p = null;Runtime rt = Runtime.getRuntime();BufferedReader in = null;InputStreamReader reader = null;try { p = rt.exec(cmds); InputStream info = p.get