c语言实现系统(Linux)文件权限的修改,以及系统文件的创建,写入和读取数据

我们都清楚,在Linux要想修改某个文件的权限,可以执行chmod命令,(4.为读权限,2.为写权限,1.为执行权限)其实我们可以通过编写C程序来实现这一命令,具体

  • chmod实现程序如下:
#include<stdio.h>
#include<stdlib.h>
#include<sys/types.h>
#include<sys/stat.h>
int main(int argv,char** argc){//用argc记录命令行参数的个数,字符二维指针记录命令行字符串
    int mode;
    int mode_u;//所有者权限
    int mode_g;//所属组权限
    int mode_o;//其他人权限
    char* path;
    if(argv<3){//验证命令行参数是否合法
        printf("Error mode!\n");
        exit(0);
    }
    mode=(atoi(argc[1]));//将要设置的权限字符串转换成整数,如"777"转换成777
    if(mode>777||mode<0){//验证要设置的权限是否合法
        printf("Error mode!\n"); 
        exit(0);
    }
    path=argc[2];//用一维字符指针通过二维指针argv指向文件名字符串的首地址
    mode_u=mode/100; 
    mode_g=mode/10%10;
    mode_o=mode%10;
    mode=mode_u*8*8+mode_g*8+mode_o;//八进制转换

    if(chmod(mode,path)=-1){//调用chmod函数进行权限修改
        perror("Error mode!\n");
        exit(1);
    }
    return 0;
}
  • 文件的创建:有两种创建方式

    通过调用open函数进行文件的创建
    函数原形如下:

#include<sys/types.h>
#include<sys/fcntl.h>
#include<sys/stat.h>
int open(const char* pathname,int flags);
int open(const char* pathname,int flags,mode_t mode);

简单的实现:

int fd;
//open 1:
if((fd==open("test",O_CREATE|O_EXCL,STRUSR| STWUSR))==-1){
//通过第二个参数可以知道先要在系统中查找文件是否存在,存在的话,提示错误信息
//通过第三个参数可以知道初始会赋予该文件可读可写权限
    perror("open");
}
//open 2:
if((fd=open("test",O_RDWR|O_CREATE|O_TRUNC,S_IRDWR))==-1){
//通过读写方式打开,验证文件是否存在,存在的话写入的数据将覆盖原有数据,不存在的话,
//以读写方式创建文件
    perror("open",__LINE__);
}

通过调用creat函数创建文件

#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
int creat(comst char *pathname,mode_t mode);//参数第一项为文件名,第二项为权限

实现如下:

int fd;
if((fd=creat("test",S_IRWXU))==-1){
//创建一个文件,如果文件已经存在,则覆盖该文件,给用户赋予文件的读写执行权限。
    perror("Create failed!\n");
}

creat函数与open的不同在于 creat函数创建文件时,只能以只写的方式打开创建的文件,creat无法创建设备文件,这个也不是很常用,一般创建文件时用open函数。

  • 文件指针的移动及向文件写入数据和读取数据
    函数原形:
//write函数
#include<unistd.h>
ssize_t write(int fd,const void *buf,size_t count);
//函数lseek
#include<sys/types.h>
#include<unistd.h>
off_t lseek(int fildes,off_t offset,int whence);
//每一个已经打开的文件,都有一个读写位置,当打开文件时,读写位置通常指向文件开头,文件的读写位置可以由lseek来控制。
lseek(int fildes,0,SEEK_CUR);//将文件指针移动到当前位置
lseek(int fildes,0,SEEK_SET);//将文件指针移动到开始位置
lseek(int fildes,0,SEEK_END);//将文件指针移动到最后位置
//函数read
int fd;
char data[50]="hello world";
if(fd=open("test",O_RDWR|O_CREAT|O_IRWXU)==-1){//先创建文件,并赋予用户读写执行权限
    perror("open",__LINE__);
    }
else{
    printf("Create file success!\n");
}
if((write(fd,data,strlen(data)))!=(strlen(data))){//将数据写入文件,并判断写入的数据长度与要写入数据长度是否相等
    perror("Write failed!\n");
}
//读取文件数据时,应用lseek函数将文件指针移动到文件开始处
int len;
if((len=lseek(fd,0,SEEK_CUR))==-1){
    printf("Error!\n");
}
int ret;
char read_buf[40];
if((ret=read(fd,read_buf,len)<0){//将文件数据全存在read_buf数组里
    printf("Read error!\n");
}
int i;
for(i=0;i<len;i++){//以len为数组的最大遍历限制进行字符数组的遍历
    printf("%c",read_buf[i]);
}
  • 结语:
    linux 文件系统操作生动有趣,还是比较吸引人去探索的!
  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,这是一个比较复杂的问题,需要分步骤来回答。 首先,我们需要了解文件系统是如何工作的。文件系统是操作系统用来管理和控制文件的一种机制,它将文件存储在磁盘上,并提供了一些函数来读取和写入文件。在Linux中,文件系统通常是由多个文件和目录组成的层次结构。 其次,我们需要知道如何打开、关闭和写入文件。在C语言中,我们可以使用标准库函数来打开和关闭文件,例如fopen()和fclose()函数。而写入文件则可以使用fwrite()函数。 下面是一个简单的示例程序,演示如何在Linux中使用C语言实现简单的文件系统,并实现打开、关闭和写入文件的功能。 ```c #include <stdio.h> #include <stdlib.h> int main() { FILE *fp; char ch; // 打开文件 fp = fopen("test.txt", "w"); // 写入文件 fprintf(fp, "Hello World!"); // 关闭文件 fclose(fp); return 0; } ``` 在上面的示例程序中,我们首先使用fopen()函数打开了一个名为“test.txt”的文件,并指定了“w”模式,表示我们要写入文件。然后使用fprintf()函数将“Hello World!”写入文件中。最后使用fclose()函数关闭文件。 这只是一个简单的示例程序,实际上在实现一个完整的文件系统时,还需要考虑诸如目录结构、文件权限等因素。但是,此示例程序可以给你一个基本的了解,如何使用C语言实现简单的文件系统,并实现打开、关闭和写入文件的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值