php函数symlink详解

建立符号链接 (symbolic link),类似于Windows里头常用的.lnk快捷方式

symlink语法: int symlink(string target, string link);

symlink返回值: 整数

函数种类: 文件存取

symlink内容说明

本函数可用来建立符号链接。从参数 target 链接到 link 处。建立硬式链接可用 link() 函数。

该函数用在Linux和WINDOWS2008以上系统。

参考

link() readlink() linkinfo()

====================================================

NTFS的symbolic link功能

当提及NTFS时人们总是会想到这个文件系统的容错性(对坏区有自动屏蔽功能)和丰富的权限设置(配合Windows的用户权限设置能提高系统的安全 性),但是NTFS同样具有Linux早就使用的Hard Link和Soft Link功能。在Windows 2000的NTFS v3就引入了类似 的功能,只是不知道出于什么原因,微软一直都懒得提及,甚至连相应的工具都几乎懒得推广。

NTFS的Hard Link相当于给一个文件多个路径 和文件名,不管访问哪个文件名都会链接到同样的数据,只有最后一个文件名被删除时这个文件的数据才会被删除,但是有个限制就是Hard Link被局限在 同一个分区里头,无法跨区。

微软提供的Hard Link创建方式:

fsutil hardlink create < 新文件名> <现有文件名>

Soft Link在微软的NTFS里头有另一个名 字:symbolic link(符号链接)。它类似于Windows里头常用的.lnk快捷方式,但是微软也同样给出了限 制:symbolic link只能应用于文件夹(包括卷),但可以跨分区使用(可以在D盘生成一个指向C盘某文件夹的symbolic link)。如 果需要创建文件的symbolic link,那就请使用.lnk吧。

而文件夹的symbolic link效果和.lnk差不 多,symbolic link本身是一个文件,用户一旦访问symbolic link的话就会自动跳转(Reparse)到目标文件夹,不过 和.lnk不同的是,symbolic link是底层文件系统里头实现,对用户和程序透明——例如,文件夹B是文件夹A的symbolic link, 那么程序访问B时就和访问A完全一样,就好像A里头的全部东西都改了路径到B下面了。不过相应的,如果你删除symbolic link(文件夹B)里头 的某个文件,文件夹A里头相应的文件也会被删除的。2k/XP的Explorer似乎也对symbolic
link支持不足,删除 symbolic link本身好像也会删除A……

symbolic link有什么用?如果你的系统盘满了,或者空间不足以让某些程序 运行时,就可以把一些在系统盘里头的文件夹移动到其他分区,然后制造一个symbolic link,这样既可以腾出空间,也可以让其他程序不至于出错。 另外由于它基于NTFS文件系统,因此在一个操作系统生成的symbolic link也同样能被另一个操作系统识别。

虽然微软没有推广 symbolic link,但是其实在2000已经开始有使用symbolic link了。

如果我们加载一个NTFS卷/分区,磁盘管理器会 提示盘符或者是否装载到某个NTFS文件夹,选择后者其实就是生成一个指向该卷/分区的symbolic link。但是操作文件夹的 symbolic link的工具,微软并没有直接提供在操作系统中,而是以Resource Kit的方式发布,最常用的工具就是命令行程序 Linkd.exe

Linkd的使用方式很简单:

LINKD Source [/D] Destination

Source             - Displays the Windows 2000 name targeted by Source

Source Destination - Links source directory to Destination directory or a Windows 2000 device or any valid Windows 2000 name

Source /D          - Deletes Source, regardless of whether a link exists at source

/?                 - Prints this help message

Windows Server 2003 Resource Kit 可以在微软网站下载到,在XP/Vista下也可以使用。

Linkd的问题:

不支持中文目录!而且查看 symbolic link的能力也不足

被微软收编的Windows小工具集SysInternals(他推出的最为人所知的小工具就是 Process Explorer)提供了和Linkd类似的工具:Junction

相关链接:http://www.microsoft.com/technet/sysinternals/FileAndDisk/Junction.mspx

Junction 的使用方法:

Junction v1.04 - Windows junction creator and reparse point viewer

Copyright (C) 2000-2005 Mark Russinovich

Systems Internals - http://www.sysinternals.com

The first usage is for displaying reparse point information, and the second usage is for creating or deleting a NTFS junction point:

usage: junction.exe [-s] [-q] <file or directory>

-q     Don't print error messages (quiet)

-s     Recurse subdirectories

usage: junction.exe [-d] <junction directory> [<junction target>]

-d     Delete the specified junction

example: junction d:\link c:\winnt

生 成一个symbolic link的语句:Junction <目录路径一> <目标目录路径>

<目录路径 一>指向的目录必须为空!如果路径一不存在则自动创建一个新目录

删除一个 symbolic link的语句:Junction <symbolic link路径>

<目录路径一>指向的空目录 会被删除,但是它指向的目标目录并不会受到影响

其他注意事项:

1.在2k/XP下,symbolic link目录看上去和操作 起来和普通文件夹并没有任何差别,不过在Vista下该目录会出现快捷方式的小箭头。

2.同一个文件夹允许有多个symbolic link指向 它,另外symbolic link也可能会造成层套情况(也就是用symbolic link指向了该目录上一级同名的目录),例如在D:\test下 制造一个symbolic link名字同样叫test并且指向了D:\test,那么进入D:\test\test时就会显示D:\test的内容—— 在它里头也有一个Test目录,继续点击进入的话浏览器路径显示的是D:\test\test\test,但是内容还是和d:\test一样继续进入的话 慢慢的会造成死循环……

php函数symlink详解的更多相关文章

  1. 自写函数VB6 STUFF函数 和 VB.net 2010 STUFF函数 详解

    '*************************************************************************'**模 块 名:自写函数VB6 STUFF函数 和 ...

  2. SQL Server数据库ROW_NUMBER()函数使用详解

    SQL Server数据库ROW_NUMBER()函数使用详解 摘自:http://database.51cto.com/art/201108/283399.htm SQL Server数据库ROW_ ...

  3. PHP函数篇详解十进制、二进制、八进制和十六进制转换函数说明

    PHP函数篇详解十进制.二进制.八进制和十六进制转换函数说明 作者: 字体:[增加 减小] 类型:转载   中文字符编码研究系列第一期,PHP函数篇详解十进制.二进制.八进制和十六进制互相转换函数说明 ...

  4. PHP date函数参数详解

    PHP date函数参数详解 作者: 字体:[增加 减小] 类型:转载       time()在PHP中是得到一个数字,这个数字表示从1970-01-01到现在共走了多少秒,很奇怪吧 不过这样方便计 ...

  5. SQL中CONVERT()函数用法详解

    SQL中CONVERT函数格式: CONVERT(data_type,expression[,style]) 参数说明: expression 是任何有效的 Microsoft® SQL Server ...

  6. php中setcookie函数用法详解(转)

    php中setcookie函数用法详解:        php手册中对setcookie函数讲解的不是很清楚,下面是我做的一些整理,欢迎提出意见.        语法:        bool set ...

  7. eval()函数用法详解

    eval()函数用法详解:此函数可能使用的频率并不是太高,但是在某些情况下具有很大的作用,下面就介绍一下eval()函数的用法.语法结构: eval(str) 此函数可以接受一个字符串str作为参数, ...

  8. Python学习入门教程,字符串函数扩充详解

    因有用户反映,在基础文章对字符串函数的讲解太过少,故写一篇文章详细讲解一下常用字符串函数.本文章是对:程序员带你十天快速入门Python,玩转电脑软件开发(三)中字符串函数的详解与扩充. 如果您想学习 ...

  9. 转载 LayoutInflater的inflate函数用法详解

    http://www.open-open.com/lib/view/open1328837587484.html LayoutInflater的inflate函数用法详解 LayoutInflater ...

随机推荐

  1. bind DNS搭建笔记

    设置默认网关 偶尔会出现问题 route add default gw 192.168.0.1 .vim /etc/sysctl.conf 这里是重点 配置路由转发,路由开启等都要用到. # Cont ...

  2. BZOJ 1503 treap

    思路: treap (算是基本操作吧-..) 加减的操作数很少 就暴力好啦 每回判断一下最小的数是不是比M小 如果是 就删,继续判断 搞定. //By SiriusRen #include <c ...

  3. sql中使用正则查询

  4. C/C++(C++内存管理,内联函数,类型转换,命名空间,string类)

    ---恢复内容开始--- 内存管理 new/delete C语言中提供了 malloc 和 free 两个系统函数,#include "stdlib.h"库函数,完成对堆内存的申请 ...

  5. BZOJ2690: 字符串游戏(平衡树动态维护Dfs序)

    Description 给定N个仅有a~z组成的字符串ai,每个字符串都有一个权值vi,有M次操作,操作分三种: Cv x v':把第x个字符串的权值修改为v' Cs x a':把第x个字符串修改成a ...

  6. 注解:@SuppressWarning()的用法

    @SuppressWarning() 作用:J2SE 提供的一个批注或者注解.该批注的作用是给编译器一条指令,忽略这些警告信息. 常用:unchecked,serial. 1.如果传入多种情况,这几种 ...

  7. 紫书 例题 9-13 UVa 1220 (最大独立子集)

    这里的状态定义的非常的巧妙,d(i, 1)表示以i为根节点且选i的子树的最大独立子集 d(i, 0)表示以i为根节点且不选i的子树的最大独立子集 d(i, 1) = sum{ d(v, 0) | v是 ...

  8. IDEA 开发工具在POM.XML文件中增加依赖

    在POM.XML 中使用快捷键 ALT+INSERT 选择第一个,输入关键字即可 选择版本,确认,ok

  9. C# textBox控件只允许为数字和小数点并且提取出这个数字

    一. textBox控件实现只允许为数字和小数点 如下图所示,在textBox控件框内输入只能是 要在textBox控件属性设置按键按下的事件触发,如下图所示: 二.源代码 textBox控件只允许为 ...

  10. 作为刚開始学习的人应该怎样来学习FPGA

    FPGA作为一种高新的技术.已经逐渐普及到了各行各业.不管是消费类.通信类.电子行业都无处不在它的身影,从1985年第一颗FPGA诞生至 今,FPGA已经历了将近20多个年头,从当初的几百个门电路到如 ...