编写Linux C程序,列出stu2主目录中的文件信息,并将其中saturday.txt文件的权限设置为文件所有者可读可写、同组用户只读、其他用户无权限。给出源程序和运行结果
时间: 2024-03-05 10:53:16 浏览: 44
以下是一个简单的程序,可以实现你的要求:
```c
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <dirent.h>
#include <sys/stat.h>
int main() {
DIR *dirp;
struct dirent *direntp;
struct stat filestat;
char path[256];
char filename[] = "saturday.txt";
char *homedir = getenv("HOME");
sprintf(path, "%s/%s", homedir, "stu2");
if ((dirp = opendir(path)) == NULL) {
perror("Failed to open directory");
return 1;
}
while ((direntp = readdir(dirp)) != NULL) {
sprintf(path, "%s/%s", homedir, "stu2");
strcat(path, "/");
strcat(path, direntp->d_name);
if (stat(path, &filestat) < 0) {
perror("Failed to get file status");
continue;
}
printf("%s\t", direntp->d_name);
printf((S_ISDIR(filestat.st_mode)) ? "d" : "-");
printf((filestat.st_mode & S_IRUSR) ? "r" : "-");
printf((filestat.st_mode & S_IWUSR) ? "w" : "-");
printf((filestat.st_mode & S_IXUSR) ? "x" : "-");
printf((filestat.st_mode & S_IRGRP) ? "r" : "-");
printf((filestat.st_mode & S_IWGRP) ? "w" : "-");
printf((filestat.st_mode & S_IXGRP) ? "x" : "-");
printf((filestat.st_mode & S_IROTH) ? "r" : "-");
printf((filestat.st_mode & S_IWOTH) ? "w" : "-");
printf((filestat.st_mode & S_IXOTH) ? "x" : "-");
printf("\n");
if (strcmp(direntp->d_name, filename) == 0) {
chmod(path, S_IRUSR | S_IWUSR | S_IRGRP);
printf("Changed permissions on %s\n", filename);
}
}
closedir(dirp);
return 0;
}
```
运行结果可能会类似于这样:
```
file1.txt -rw-r--r--
file2.txt -rw-r--r--
file3.txt -rw-r--r--
saturday.txt -rw-r--r--
Changed permissions on saturday.txt
```
注意:在运行程序之前,需要先手动创建一个名为 `stu2` 的目录,然后在其中添加一些文件以供测试。程序中使用了 `getenv("HOME")` 函数来获取当前用户的主目录,所以无论你在哪里运行程序,都会读取到正确的路径。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pptx](https://img-home.csdnimg.cn/images/20210720083543.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pptx](https://img-home.csdnimg.cn/images/20210720083543.png)