Linux之文件操作(1)

Linux下文件分类
(1)普通文件(regular file):这是最常见文件类型,这种文件包含了某种形式的数据。至于这种数据是文本还是二进制文件,对内核并无区别。对普通文件内容的解释由处理该文件的应用程序完成。
(2)目录文件(directory file):目录文件就是目录,目录也有访问权限,目录内容就是该目录下的文件和子目录信息,对一个目录文件具有读许可权的任意进程都可以读该目录的内容,但只有内核可以写目录文件。
(3)字符特殊文件(character special file):表示系统字符类型的设备,如键盘鼠标等。
(4)块特殊文件(block special file):表示系统中块类型的设备,如硬盘光驱等。一次至少读取一个块。
(5)FIFO:这类文件用于进程间的通信,也称为管道。
(6)套接字(socket):主要用于网络通信,也可以用于一台主机上进程之间的通信。
(7)符号连接(symbolic link)(又称:软连接):指向另一个文件,是另一个文件的引用。是Linux下的快捷方式。此文件包含有连接指向的文件的绝对路径。

硬连接(hard link):当文件出现一个目录文件时,我们就把文件接入文件系统,我们称建立一个到文件的硬连接。当硬连接数目为0时,文件会被Linux删除。

修改文件访问权限
r:读取 (4) w:写入 (2) x:执行 (1)
chomd 是修改文件访问权限的。

在Shell下输入 man 2 chmod 查看chmod/fchmod 函数原型

#include <sys/types.h>
#include <sys/stat.h>
int chmod(const char *path, mode_t mode);
int fchmod(int fildes, mode_t mode);

参数mode的数值
S_IRUSR(S_IREAD)00400文件所有着具有可读取权限
S_IWUSR(S_IWRITE) 00200文件所有者具有可写入权限
S_IXUSR(S_IEXEC) 00100文件所有者具有可执行权限
S_IRGRP 00040用户组具有可读取权限
S_IWGRP 00020用户组具有可写入权限
S_IXGRP 00010用户组具有可执行权限
S_IROTH 00004其他用户具有可读取权限
S_IWOTH 00002其他用户具有可写入权限
S_IXOTH 00001其他用户具有可执行权限
S_ISUID 04000文件的(set user-id execution)位
S_ISGID 02000 文件的(setgroup-id execution)位
S_ISOTH 01000文件的sticky位
chmod权限修改成功返回0,修改失败返回-1。

基于系统安全,如果欲将数据写入一执行文件,而该执行文件具有S_ISUID 或S_ISGID 权限,则这两个位会被清除。如果一目录具有S_ISUID 位权限,表示在此目录下只有该文件的所有者或root 可以删除该文件。
my_chmod.c

#include<stdio.h>
#include<stdlib.h>
#include<sys/stat.h>
#include<sys/types.h>

int main(int argc ,char **argv)
{
    int mode;
    int mode_user;
    int mode_group;
    int mode_other;
    char *path;

    if(argc<3)
    {
        printf("intput little");
        exit(1);
    }
    mode=atoi(argv[1]);
    if(mode<0||mode>777)
    {
        printf("error");
        exit(0);
    }
    mode_user=mode/100;
    mode_group=mode%100/10;
    mode_other=mode%10;

    mode=mode_user*8*8+mode_group*8+mode_other;
    path=argv[2];
    if(chmod(path,mode)==-1)
    {
        perror("F");
        exit(1);
    }
    return 0;
    }

./my_chmod 745 test.c
745是一个字符串,通过atoi函数可以将字符串转化成整数。其整数是十进制的。7是文件所有者的权限(有可读取可写入可执行权限),4是拥有组的权限(具有可读取权限),5是其他用户所具有的权限(具有可读取可执行权限)。7,4,5进行八进制转化。
八进制存储 ——– 二进制存储
0700—————000111000000
7通过S_IRUSR,S_IWUSR,S_IXUSR或运算得到。
0040—————000000100000
4通过S_IRGRP得到
0005—————000000000101
5通过S_IROTH,S_IXOTH或运算得到。
字符常量值对应的八进制值在上面。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值