要求可提供菜单让用户选择可以的操作,包括: i. 创建文件 ii. 写文件 iii. 读文件 iv. 修改文件权限(chmod,读、写、执行),可修改为的权限包括: 0700 , 0400 , 0200 , 0100 v. 查看当前文件权限 vi. 退出如何用c语言实现
时间: 2023-06-25 12:03:11 浏览: 44
可以使用C语言中的系统调用函数来实现这些操作,下面是一个简单的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
int main() {
int choice;
char filename[100];
int fd, permission;
char buffer[1024];
ssize_t num_read, num_written;
struct stat file_stat;
while (1) {
printf("请选择操作:\n");
printf("1. 创建文件\n");
printf("2. 写文件\n");
printf("3. 读文件\n");
printf("4. 修改文件权限\n");
printf("5. 查看当前文件权限\n");
printf("6. 退出\n");
printf("请输入操作序号:");
scanf("%d", &choice);
switch (choice) {
case 1:
printf("请输入文件名:");
scanf("%s", filename);
fd = open(filename, O_CREAT | O_EXCL | O_RDWR, S_IRUSR | S_IWUSR);
if (fd == -1) {
perror("open");
exit(EXIT_FAILURE);
}
printf("文件 %s 创建成功!\n", filename);
close(fd);
break;
case 2:
printf("请输入文件名:");
scanf("%s", filename);
fd = open(filename, O_WRONLY);
if (fd == -1) {
perror("open");
exit(EXIT_FAILURE);
}
printf("请输入要写入的内容:");
scanf("%s", buffer);
num_written = write(fd, buffer, sizeof(buffer));
if (num_written == -1) {
perror("write");
exit(EXIT_FAILURE);
}
printf("文件 %s 写入成功!\n", filename);
close(fd);
break;
case 3:
printf("请输入文件名:");
scanf("%s", filename);
fd = open(filename, O_RDONLY);
if (fd == -1) {
perror("open");
exit(EXIT_FAILURE);
}
num_read = read(fd, buffer, sizeof(buffer));
if (num_read == -1) {
perror("read");
exit(EXIT_FAILURE);
}
printf("文件 %s 内容为:%s\n", filename, buffer);
close(fd);
break;
case 4:
printf("请输入文件名:");
scanf("%s", filename);
printf("请输入要修改的权限(0700、0400、0200、0100):");
scanf("%o", &permission);
if (chmod(filename, permission) == -1) {
perror("chmod");
exit(EXIT_FAILURE);
}
printf("文件 %s 权限修改成功!\n", filename);
break;
case 5:
printf("请输入文件名:");
scanf("%s", filename);
if (stat(filename, &file_stat) == -1) {
perror("stat");
exit(EXIT_FAILURE);
}
printf("文件 %s 的权限为:%o\n", filename, file_stat.st_mode & 0777);
break;
case 6:
exit(EXIT_SUCCESS);
default:
printf("无效的操作序号,请重新输入!\n");
break;
}
}
return 0;
}
```
注意,这只是一个简单的示例代码,并没有考虑到很多细节和错误处理,实际应用中需要根据具体需求进行修改和完善。