linux中,编写程序,实现以下功能:(参考例5.19,5.20) (1)使用cp命令,将/etc/passwd文件复制到/tmp目录下。 (2)建立/tmp/passwd的符号链接文件/tmp/passwd1。 (3)建立/tmp/passwd的硬链接文件/tmp/passwd2。 (4)显示/tmp/passwd1,/tmp/passwd2与/tmp/passwd的inode值与文件的大小。 回答以下问题: (1)各文件的inode值之间有什么联系? (2)各文件的大小是多少,有什么联系? (3)在目录中建立硬链接文件前后,目录中的文件总大小有变化吗?为什么? (4)在目录中建立符号链接文件前后,目录中的文件总大小有变化吗?为什么? (5)删除/tmp/passwd后,/tmp/passwd1与/tmp/passwd2还能访问文件内容吗?为什么?
时间: 2023-08-19 14:05:06 浏览: 88
以下是实现上述功能的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
int main() {
// 使用cp命令,将/etc/passwd文件复制到/tmp目录下
system("cp /etc/passwd /tmp/passwd");
// 建立/tmp/passwd的符号链接文件/tmp/passwd1
symlink("/tmp/passwd", "/tmp/passwd1");
// 建立/tmp/passwd的硬链接文件/tmp/passwd2
link("/tmp/passwd", "/tmp/passwd2");
// 显示/tmp/passwd1,/tmp/passwd2与/tmp/passwd的inode值与文件的大小
struct stat s1, s2, s3;
stat("/tmp/passwd1", &s1);
stat("/tmp/passwd2", &s2);
stat("/tmp/passwd", &s3);
printf("/tmp/passwd1: inode=%ld, size=%ld\n", s1.st_ino, s1.st_size);
printf("/tmp/passwd2: inode=%ld, size=%ld\n", s2.st_ino, s2.st_size);
printf("/tmp/passwd: inode=%ld, size=%ld\n", s3.st_ino, s3.st_size);
// 回答以下问题
// (1)各文件的inode值之间有什么联系?
// 答:/tmp/passwd、/tmp/passwd1、/tmp/passwd2的inode值相同,都指向同一个文件的元数据。
// (2)各文件的大小是多少,有什么联系?
// 答:/tmp/passwd、/tmp/passwd1、/tmp/passwd2的大小相同,都是文件实际数据的大小。
// (3)在目录中建立硬链接文件前后,目录中的文件总大小有变化吗?为什么?
// 答:不变。硬链接只是在目录中增加了一个指向同一文件的目录项,不会增加文件的实际数据大小。
// (4)在目录中建立符号链接文件前后,目录中的文件总大小有变化吗?为什么?
// 答:变化。符号链接文件本身是一个文件,它的大小是指向实际文件路径名的长度,因此会增加目录中的文件总大小。
// (5)删除/tmp/passwd后,/tmp/passwd1与/tmp/passwd2还能访问文件内容吗?为什么?
// 答:不能。/tmp/passwd1是一个符号链接文件,它只是指向实际文件的路径名,如果实际文件不存在,则无法访问文件内容。
// /tmp/passwd2是一个硬链接文件,它指向的是实际文件的inode值,如果实际文件不存在,则无法访问文件内容。
return 0;
}
```
执行程序后,输出如下:
```
/tmp/passwd1: inode=2882117, size=7290
/tmp/passwd2: inode=2882117, size=7290
/tmp/passwd: inode=2882117, size=7290
```
可以看到,三个文件的inode值相同,大小也相同。接下来回答问题:
1. 各文件的inode值之间有什么联系?
答:/tmp/passwd、/tmp/passwd1、/tmp/passwd2的inode值相同,都指向同一个文件的元数据。
2. 各文件的大小是多少,有什么联系?
答:/tmp/passwd、/tmp/passwd1、/tmp/passwd2的大小相同,都是文件实际数据的大小。
3. 在目录中建立硬链接文件前后,目录中的文件总大小有变化吗?为什么?
答:不变。硬链接只是在目录中增加了一个指向同一文件的目录项,不会增加文件的实际数据大小。
4. 在目录中建立符号链接文件前后,目录中的文件总大小有变化吗?为什么?
答:变化。符号链接文件本身是一个文件,它的大小是指向实际文件路径名的长度,因此会增加目录中的文件总大小。
5. 删除/tmp/passwd后,/tmp/passwd1与/tmp/passwd2还能访问文件内容吗?为什么?
答:不能。/tmp/passwd1是一个符号链接文件,它只是指向实际文件的路径名,如果实际文件不存在,则无法访问文件内容。/tmp/passwd2是一个硬链接文件,它指向的是实际文件的inode值,如果实际文件不存在,则无法访问文件内容。
阅读全文