UNIX下ln和cp的一些问题!
今天在看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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论