- 论坛徽章:
- 0
|
在第四章中的程序4-10中;
1 /* test4_10.c -- show the usage of st_dev and st_rdev */
2 #include <sys/stat.h>
3 #include "../ourhdr.h"
4
5 int
6 main(int argc, char *argv[])
7 {
8 int i;
9 struct stat buf;
10
11 for(i = 1; i < argc; i++) {
12 printf("%s: ", argv[i]);
13 if(lstat(argv[i], &buf) < 0) {
14 printf("lstat error\n");
15 exit(-1);
16 }
17
18 printf("dev = %d/%d", major(buf.st_dev), minor(buf.st_dev));
19
20 if(S_ISCHR(buf.st_mode) || S_ISBLK(buf.st_mode)) {
21 printf(" (%s) rdev = %d/%d",
22 (S_ISCHR(buf.st_mode)) ? "character" : "block",
23 major(buf.st_dev), minor(buf.st_mode));
24 }
25 printf("\n");
26 }
27 exit(0);
28
可以正常输出结果,
[123@localhost charpter4]$ ./a.out / ./ /dev/tty[12]
/: dev = 3/3
./: dev = 3/3
/dev/tty1: dev = 0/13 (character) rdev = 0/144
/dev/tty2: dev = 0/13 (character) rdev = 0/144
[123@localhost charpter4]$
但有几点不明白: 1. 主设备号和次设备号到底是啥意思? (我在网上查了一下. 主设备号: 用来区分不同类型的设备,从我上边的输出可以看出这点; 次设备: 表示不同的设备, 这个就有点不懂了从我的程序输出也看不出来有啥区别), 还有这些设备号在哪儿定义,根据什么来定义? 2. 在13行中为啥要用lstat而不用stat(如果lstat的参数是符号连接的话, 那么lstat将测试符号连接的属性, 而符号连接的属性应该和它所指向的文件属性是一样的(这点是个人理解),那么用stat(可以跟随符号连接)不是可以实现同样的功能吗?).
小弟是刚开始看, 理解有限, 有不对的地方, 请大家多多指教. |
|