第三题
文件系统
#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;
}
插眼