OS

 

第三题

文件系统

#include"stdio.h"
#include"stdlib.h"
#include<iostream>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<string.h>
#include<malloc.h>
#include<unistd.h>
using namespace std;

int menu()
{
	int select=0;
	printf("请输入0~5的数字\n");
	printf("输入1创建新文件\n");
	printf("输入2写文件\n");
	printf("输入3读文件\n");
	printf("输入4修改文件权限\n");
	printf("输入5查看当前文件权限\n");
	printf("输入0退出程序\n");
	//scanf("%d",&select);
	cin>>select;
	switch(select)
	{
		case 0:exit(0);
		case 1:select=1;break;
		case 2:select=2;break;
		case 3:select=3;break;
		case 4:select=4;break;
		case 5:select=5;break;	
	}
	return select;
}

void Cre_file(char *pathname)
{
	int fd=0;
	fd=creat(pathname,S_IRWXU);
	if(fd!=-1)	printf("创建成功!\n\n");
	else printf("错误\n\n");
}

int Wri_file(char *pathname)
{
	int fd=0;
	char writebuf[500];
	int writedata_num=0;
	fd=open(pathname,O_WRONLY|O_APPEND);
	if(fd!=-1)
	{
		printf("已成功打开文件,可以写入文件\n\n");
		printf("请输入需要写入的内容\n");
		scanf("%s",writebuf);
		writedata_num=write(fd,writebuf,strlen(writebuf));
		if(writedata_num!=-1)
			printf("已成功写入\n\n");
		else printf("写入错误\n\n");
	}
	else printf("打开文件错误,无权限或该文件未创建\n\n");
	close(fd);
	return writedata_num;
}

void Rea_file(char *pathname,int writedata_num)
{
	int fd=0;
	fd=open(pathname,O_RDONLY);
	char*readbuf=(char*)malloc(sizeof(char)*writedata_num);
	int readdata_num=0;
	if(fd!=-1)
	{
		printf("已成功打开文件,可以读取文件\n\n");
		readdata_num=read(fd,readbuf,writedata_num);
		printf("文件中信息为:%s\n\n",readbuf);
	}
	else printf("打开文件错误,无权限或该文件未创建\n");
	close(fd);
}

void Cha_file_limits(char *pathname)
{
	int select=0;
	printf("输入1将该文件修改为只读\n\n");
	printf("输入2将该文件改为可读写\n\n");
	scanf("%d",&select);
	if(select==1)
	{
		chmod(pathname,S_IRUSR);
		printf("修改成功!\n\n");
	}
	else if(select==2)
	{
		chmod(pathname,S_IRUSR|S_IWUSR|S_IXUSR);
		printf("修改成功!\n\n");
	}
}

void Sea_file_limits(char *pathname)
{
	char arraya[2]={'l','s'};
	char arrayb[2]={'-','l'};
	//char* pargv[4]={"ls","-l",pathname,NULL};
	char* pargv[4]={arraya,arrayb,pathname,NULL};
	if(execv("/bin/ls",pargv)==-1)//执行完后退出当前进程
		printf("错误\n");
}

int main()
{
	printf("请输入创建的文件名\n");
        char filename[20];
        scanf("%s",filename);
        char pathname[100];
        sprintf(pathname,"/home/hujing/桌面/xy/%s",filename);
	int writedata_num=0;
	while(1)
	{
		int select=menu();
		switch(select)
		{
			case 1:Cre_file(pathname);break;
			case 2:writedata_num+=Wri_file(pathname);break;
			case 3:Rea_file(pathname,writedata_num);break;
			case 4:Cha_file_limits(pathname);break;
			case 5:Sea_file_limits(pathname);break;
		}
	}
	return 0;
}

插眼

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值