UNIX下ln和cp的一些问题!

发布于 2022-10-15 09:26:38 字数 2102 浏览 21 评论 0

今天在看UNIX环境高级编程的第四章,章节的后面有道习题内容如下:

            编写一个类似cp(1)的程序,它复制包含空洞的文件,但不将字节0写到输出文件中去。

看到这个题的时候我首先就想到这章看到的open,dup,dup2,link,symlink几个函数,dup,dup2是创建新的文件描述符,但是和复制对象共用文件表项,我的理解就是进程两个文件数据共享,退出后就释放了,所以没有cp的功能,open按路径打开文件,不能同时创建文件和打开一个已经打开的文件。就只剩下link,symiink,其中link是创建硬连接,symlink是创建符号连接。我用以下指令测试这两个函数:

kastelo@debian:~/src/code$ ls -l temp.foo
-rw-rw-rw- 1 root root 2198  4月 15 22:02 temp.foo
kastelo@debian:~/src/code$ ln -d /home/kastelo/savetemp.foo temp.foo
ln: 正在访问"/home/kastelo/savetemp.foo": 没有那个文件或目录
kastelo@debian:~/src/code$ ln -d temp.foo /home/kastelo/savetemp.foo
kastelo@debian:~/src/code$ cd ~
kastelo@debian:~$ ls -l savetemp.foo
-rw-rw-rw- 2 root root 2198  4月 15 22:02 savetemp.foo
kastelo@debian:~$ ls -s src/code/temp.foo ltemp.foo
ls: 无法访问ltemp.foo: 没有那个文件或目录
4 src/code/temp.foo
kastelo@debian:~$ ln -s src/code/temp.foo ltemp.foo
kastelo@debian:~$ ls -l *temp*
lrwxrwxrwx 1 kastelo kastelo   17  4月 15 22:04 ltemp.foo -> src/code/temp.foo
-rw-rw-rw- 2 root    root    2198  4月 15 22:02 savetemp.foo
kastelo@debian:~$ rm src/code/temp.foo
kastelo@debian:~$ ls -l *temp*
lrwxrwxrwx 1 kastelo kastelo   17  4月 15 22:04 ltemp.foo -> src/code/temp.foo
-rw-rw-rw- 1 root    root    2198  4月 15 22:02 savetemp.foo
kastelo@debian:~$ gedit ltemp.foo
kastelo@debian:~$ gedit savetemp.foo
kastelo@debian:~$ cp savetemp.foo src/code/temp.foo
kastelo@debian:~$ ls -l *temp*
lrwxrwxrwx 1 kastelo kastelo   17  4月 15 22:04 ltemp.foo -> src/code/temp.foo
-rw-rw-rw- 1 root    root    2198  4月 15 22:02 savetemp.foo

可以看出用硬连接创建的savetemp.foo功能和cp差不多,而符号连接symlink相当于一个指针,删除temp.foo后就无效了。

所以我最后认为这个题的解就是用link函数创建一个对象文件的硬连接!想问哈大家这样做对吗?如果对那是不是说link和cp是一样的功能!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文