21-link系列的函数
来源:互联网 发布:算法流程图怎么写 编辑:程序博客网 时间:2024/06/05 17:03
link 系列的函数,主要是用来创建链接,删除链接的。主要有 link、symlink、unlink、readlink
这几个。
它们的功能如下:
1 实例
在此之前先创建测试文件 test.txt
$ echo hello > test.txt$ ls -l test.txt-rw-rw-r-- 1 allen allen 6 12月 2 14:26 test.txt
1.1 link
link 函数专门用来创建硬链接的,功能和 ln
命令一样。它主要做两件事:1) 创建一个目录项 2) inode 结构体引用计数加 1。这两步是一个原子操作,要么全部失败,要么全部成功。
- 函数原型
// 输入参数 oldpath: 原始文件名// 输入参数 newpath: 新的硬链接名// 返回 0 成功,-1 失败int link(const char *oldpath, const char *newpath);
- 实例代码
// mylink.c#include <unistd.h>#include <stdio.h>int main(int argc, char* argv[]) { if(link(argv[1], argv[2]) == -1) { perror("link"); } return 0;}
- 编译和测试
$ gcc mylink.c -o mylink$ ./mylink test.txt hellotest
这时会生成 hellotest 文件,和 test.txt 的内容完全一样。
1.2 symlink
该函数用来创建符号链接,功能和 ln -s
命令一样。
- 函数原型
// 输入参数 target: 原始文件名// 输入参数 linkpath: 符号链接名// 返回 0 成功,-1 失败int symlink(const char *target, const char *linkpath);
- 实例代码
// mysymlink.c#include <unistd.h>#include <stdio.h>int main(int argc, char* argv[]) { if (symlink(argv[1], argv[2]) == -1) { perror("symlink"); } return 0;}
- 编译和测试
$ gcc mysymlink.c -o mysymlink$ ./mysymlink test.txt nihaotest
执行完后会生生一个软链接 nihaotest.
1.3 unlink
对于硬链接来说,unlink 用来删除目录项,并把 inode 引用计数减 1,这两步也是一个原子过程。直到 inode 引用计数为 0,才会真正删除文件。
对于软链接来说,unlink 直接删除软链接,而不影响软链接指向的文件。
unlink 不能用来删除目录。想删除目录,可以使用 rmdir 函数或者 ANSI C 的 remove 函数。
- 函数原型
// 输入参数 pathname: 要删除的文件名// 返回 0 成功,-1 失败int unlink(const char *pathname);
- 实例代码
// myunlink.c#include <unistd.h>#include <stdio.h>int main(int argc, char* argv[]) { if (unlink(argv[1]) == -1) { perror("unlink"); } return 0;}
- 编译和测试
$ gcc myunlink.c -o myunlink$ ./myunlink hellotest
执行完后,会删除 hellotest,同时 inode 引用计数减 1.
1.4 readlink
该函数用于读取符号链接文件自身内容,而不是符号链接所指向的文件内容。
- 函数原型
// 输入参数 pathname: 符号链接名// 输出参数 buf: 接收缓冲区// 输入参数 bufsiz: 缓冲区大小// 返回 -1 失败。成功返回读取数据的实际大小ssize_t readlink(const char *pathname, char *buf, size_t bufsiz);
- 实例代码
// myreadlink.c#include <unistd.h>#include <stdio.h>int main(int argc, char* argv[]) { char buf[256] = { 0 }; if (readlink(argv[1], buf, 256) == -1) { perror("readlink"); } printf("%s\n", buf); return 0;}
- 编译和测试
$ gcc myreadlink.c -o myreadlink$ ./mysymlink ./test.txt hahatest$ ./myreadlink hahatest
执行完后显示
./test.txt
2 总结
- 掌握这 4 个函数。
- unlink 函数不能删除目录,如果想删除目录,可以使用 rmdir 函数或者 ANSI C 中的 remove 函数。
0 0
- 21-link系列的函数
- inline函数的link错误
- 发掘ListBox的潜力 系列文章Link
- link函数
- 从symbol link和hard link 到 unlink函数的一点记录
- 使用全局函数导致的Link 4006 错误
- APUE 里 link() 和 symlink() 函数的区别
- Unix学习笔记----编程实例-------Link函数的实例使用:
- [C++系列] Printf系列函数的玄机
- zynq-7000系列基于zynq-zed的MAC->MAC 的实现(fixed-link)
- Jlink隔离器,ARM仿真器隔离,Jlink,Nu-link,ULINK的隔离,Cortex-M系列隔离仿真
- 科技小论文?一些奇怪的东西?QTREE系列加上link和cut?。。。
- exec系列函数的实现
- js的时间系列函数
- Interlocked 系列函数的实现
- RtlInitializeGenericTable系列函数的总结
- RtlInitializeGenericTable系列函数的总结
- 常用的Interlocked系列函数
- 面试题1
- nmap xxxxxxx.com
- 关于Java并发编程的总结和思考
- Android 应用程序窗体显示状态操作(显示隐藏标题栏或自定义窗体大小)
- apache-ab并发负载压力测试
- 21-link系列的函数
- 如何进行正确的SQL性能优化
- 使用webstorm打开html时提示404错误
- iOS基于Https的网络请求
- java构造对象
- Android03
- redis点滴 事务(二)
- Mutual Training for Wannafly Union #2
- android用于打开各种文件的intent