Linux 简单文件操作

       Linux系统对文件有极其严格的保护。如果用户不具备访问某个文件或目录的权限,那么就不能对文件进行操作。文件的属性和权限是Linux中目录和文件的两个基本特性。

查看文件的属性

       在Linux中可以通过:ls -l 查看文件或目录的属性,输出中每行文件信息的第一组字符串就是文件的权限信息。

       ls -l以长格式显示目录下的内容列表,从左到右以此为:

  • 文件的权限标志
  • 文件的链接个数
  • 文件所有者的用户名
  • 该用户所造的用户组的组名
  • 文件的大小
  • 最后一次被修改的时间
  • 文件名

       其中:字符串的首字母是用来表示该文件的类型。
        d:表示目录;
        -:表示普通文件
        b:表示输入输出设备文件,通常是磁盘驱动器;
        c:表示连续输入输出设备,通常是声卡、调制解调器等;
        l:表示是链接文件
       p:表示是管道文件

文件的权限

       文件的权限可简单概括如下:

       用户 组 其它
       rwx rwx rwx
       普通文件:
       r 可读权限
       w 可写权限
        可执行权限

       目录

       r 是否可浏览
       w 是否可创建或删除
       x 是否可进入

       文件的权限分别为属主(user),属组(group),和其他用户(other)的权限:
       比如:drwxrwxr-x
       这10个字符应该这样断开:
       d rwx rwx r-x 分别表示文件类型,属主、属组、和其他人所拥有的权限。如果某个权限被禁用,那么就用一个”-“代替。如这个例子中其他用户的权限为r-x,表示其他用户对其有可读,可执行权限,无可写权限。

打开文件、新建文件和关闭文件操作

       打开文件、新建文件和关闭文件是最基本的3个操作。
       打开文件操作使用系统调用函数open(),该函数的作用是建立一个文件描述符,其他的函数可以通过文件描述符对指定文进行读取和写入操作。
       打开文件的一般形式是:open(文件路径,标志);
       函数的返回值是文件描述符,如果打开文件成功,返回一个正整数,否则,返回-1;
       标志是用于指定打开文件操作模式的枚举常量。可以以只读、只写、读和写方式打开文件。打开文件的主标志如下表:

参数说明
O_RDONLY以只读方式打开文件
O_WRONLY以只写方式打开文件
O_RDWR以可读可写方式打开文件

       主标志是互斥的,只能使用其中一种。副标志可以与主标志配合使用,即可同时使用多个副标志,使用时在主标志与副标志之间加入按位与“|”运算符。

       打开文件操作的副标志:

参数说 明
O_APPEND读写文件从文件尾部开始移动,所写入的数据追加到文件尾
O_TRUNC若文件存在并且以可写的方式打开,此标志会将文件长度清0,而原来存在于该文件的数据将会消失
O_CREAT若路径中的文件不存在则自动建立该文件
O_EXCL如果与O_CREAT同时设置,此指令会去检查文件是否存在,如文件不存在则建立该文件,否则将导致打开文件错误。如果O_CREAT与O_EXCL同时设置,并且将要打开的文件为符号连接,否则将导致打开文件失败。

       O_CREAT是使用相对较多的副标志,O_CREAT用于打开的文件不存在时新建文件:是在打开文件的操作的函数上加入O_CREAT副标志来实现的。当路径中的文件不存在时,则创建一个新文件。创建新文件的同时可以设置文件的权限,这是函数需要增加一组实际参数。形式为:

open(文件路径,标志,权限标志);

       文件的权限标志可以使用加权数字表示,这组数字称为 umask 变量,(一个无符号8进制数)。用户获得的权限是加权数字的总和。umask变量由3位数字组成,数字的每一位代表一类权限(依次为读、写、执行权限)。权限的加权数是将权限分别用数值4、2、1表示。这样rwx就可以转化为7,rw转化为6、rx转化为5,r转化为4。

       新建文件的另一个函数是 creat();该函数的一般形式为:
creat(路径,权限掩码);
       当文件被成功创建函数的返回值为0,否则为-1。
       关闭文件使用close()函数,函数一般形式为close(文件描述符);
如果关闭文件成功,函数返回值为0,否则返回-1。

       下面是使用C语言代码实现简单的文件操作:

  1 #include<stdio.h>
  2 #include<unistd.h>
  3 #include<fcntl.h>
  4 #include<sys/types.h>
  5 #include<sys/stat.h>
  6 
  7 int main()
  8 {
  9     int fd;   //文件标识符
 10     char *path = "./test.txt";  //定义路径字符串,./表示当前路径,也可以自己指定路径,./可以省略,默认为为当前路径
 11     fd = open(path,O_RDONLY); //以只读方式打开文件
 12     //open函数用于打开文件,如果打开文件成功返回一个正整数,否则返回-1   
 13     if(fd < 0)  //打开文件失败
 14     {
 15         printf("打开文件失败!\n");
 16         fd = open(path,O_RDONLY|O_CREAT,0741);  //创建文件
 17         if(fd!=-1)
 18         {
 19             printf("创建了一个新文件!\n");
 20         }
 21         else
 22         {
 23             printf("创建文件失败!\n");
 24 
 25         }
 26 
 27     }
 28     else
 29     {
 30         printf("打开文件成功!\n");
 31     }
 32     close(fd);
 33 
 34     return 0;
 35 }

       该程序首先判断是否存在文件test.txt,判断方法是使用open函数打开test.txt文件,如果返回值小于使用0,则输出提示信息,打开文件失败,当文件不存在时使用open创建一个名为test.txt的新文件,使用GCC进行编译,运行结果输出:打开文件失败,创建了一个新文件。这时我们使用ls命令,可以看到当前目录下多出一个test.txt的文件。这时test.txt文件已经存在,再次运行程序则会输出:打开文件成功!。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值