本文共 3713 字,大约阅读时间需要 12 分钟。
文件类型 | ls 缩写 | 应用 |
---|---|---|
常规文件 | - | 保存数据 |
目录 | d | 存放文件 |
符号链接 | l(小写的 ’L‘) | 指向其他文件 |
字符设备节点 | c | 访问设备 |
块设备节点 | b | 访问设备 |
命名管道函数 | p | 进程间通信 |
套接字 | s | 进程间通信 |
ubuntu@cuname:~/test$ ls -ltotal 0ubuntu@cuname:~/test$ touch data.txt // 新建文件 data.txtubuntu@cuname:~/test$ ls -ltotal 0-rw-rw-r-- 1 ubuntu ubuntu 0 Apr 6 23:50 data.txtubuntu@cuname:~/test$ ln data.txt 2data.txt // 创建硬链接ubuntu@cuname:~/test$ ls -ltotal 0-rw-rw-r-- 2 ubuntu ubuntu 0 Apr 6 23:50 2data.txt-rw-rw-r-- 2 ubuntu ubuntu 0 Apr 6 23:50 data.txtubuntu@cuname:~/test$ ln data.txt 3data.txt // 创建硬链接ubuntu@cuname:~/test$ ls -ltotal 0-rw-rw-r-- 3 ubuntu ubuntu 0 Apr 6 23:50 2data.txt-rw-rw-r-- 3 ubuntu ubuntu 0 Apr 6 23:50 3data.txt-rw-rw-r-- 3 ubuntu ubuntu 0 Apr 6 23:50 data.txtubuntu@cuname:~/test$ ln -s data.txt 4data.txt // 创建软链接ubuntu@cuname:~/test$ ls -ltotal 0-rw-rw-r-- 3 ubuntu ubuntu 0 Apr 6 23:50 2data.txt // 硬链接-rw-rw-r-- 3 ubuntu ubuntu 0 Apr 6 23:50 3data.txt // 硬链接lrwxrwxrwx 1 ubuntu ubuntu 8 Apr 6 23:51 4data.txt -> data.txt // 软链接-rw-rw-r-- 3 ubuntu ubuntu 0 Apr 6 23:50 data.txt // 原始文件
图示如下:
4. 软链接:如上图所示,软链接其实是一个新文件 (和硬链接不同,硬链接仅仅创建了一个新的 dentry,并指向原文件的 inode),软链接同时带有其新创建的 inode。软链接不是一个常规文件,而是一个符号链接(symbolic link)。该符号链接并不保存实际的数据,而是保存另一个文件的名称。当需要 Linux 内核查找该符号链接时,它就自动把这个符号链接解析为那个文件的文件名。使用这个符号链接的用户(或进程)并不知道其中的差别。#include#include #include void main(){ int res = 0; char buf[5]; buf[0] = '\0'; // 将字符串初始化为空串 // 不论是硬链接还是软链接,读取文件时,都存在路径问题,最好的方式是使用绝对路径 FILE *fd = fopen("/tmp/data.txt", "r"); if(fd == NULL){ printf("file:data.txt is not found.\n"); exit(EXIT_FAILURE); } // sleep(50); res = fread(buf, 1, 4, fd); if(res >= 0){ // 处理字符串结尾 buf[res] = '\0'; } printf("result is \"%s\"\n", buf); // 正确输出为‘1234’}
文件 data.txt 内容如下:
ubuntu@cuname:~/dev/beginning-linux-programming/test/d1$ echo "123456789" > /tmp/data.txtubuntu@cuname:~/dev/beginning-linux-programming/test/d1$ more /tmp/data.txt123456789
注:创建软链接时,目标文件必须使用绝对路径。而创建硬链接时,可以使用相对路径。
ubuntu@cuname:/proc$ cat cpuinfo processor : 0vendor_id : GenuineIntelcpu family : 6model : 142model name : Intel(R) Core(TM) i5-7200U CPU @ 2.50GHzstepping : 9microcode : 0x84cpu MHz : 2711.997...
ubuntu@cuname:/proc$ cat meminfoMemTotal: 4016440 kBMemFree: 1326624 kBMemAvailable: 2176944 kBBuffers: 106916 kBCached: 925356 kB...
// 运行程序 (程序打开文件后,会睡眠 50 秒)ubuntu@cuname:~/dev/beginning-linux-programming/test$ gcc -o test1 test1.cubuntu@cuname:~/dev/beginning-linux-programming/test$ ./test1// 查找进程 pid 为 7904ubuntu@cuname:/proc$ ps uUSER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMANDubuntu 7904 0.0 0.0 4352 652 pts/18 S+ 11:14 0:00 ./test1// 进行查询操作// 进入指定进程目录ubuntu@cuname:/proc$ cd /proc/7904/ // fd 目录ubuntu@cuname:/proc/7904$ ls -ldr-x------ 2 ubuntu ubuntu 0 Apr 7 11:14 fd // 可以看到当前打开的文件 ‘/tmp/data.txt’,其描述符为 3ubuntu@cuname:/proc/7904$ ls -l fdlr-x------ 1 ubuntu ubuntu 64 Apr 7 11:14 3 -> /tmp/data.txt
转载地址:http://yclsi.baihongyu.com/