使用重命名时,会使用完整的目录名吗?我似乎无法让这个例子起作用,尽管所有的迹象都表明它应该。谁知道为什么?例;
original file location is: /home1/s/j/jb986132/402project4/402project4TEST/checkDirectory.c
final destination of file is: /home1/s/j/jb986132/402project4/402project4TEST/c/checkDirectory.c
filename is: checkDirectory.c
destinationName is: /c/checkDirectory.c
active is: /home1/s/j/jb986132/402project4/402project4TEST
我可以把它写成:
rename(original file location, final destination)
实际上,标准本身对函数的允许参数几乎没什么可说的,它简单地说明:
rename
函数导致名称为old
指向的字符串的文件因此由new
指向的字符串给出的名称所知。该名称不再可以访问名为old
的文件。如果在调用new
函数之前存在由rename
指向的字符串命名的文件,则该行为是实现定义的。如果操作成功,则
rename
函数返回零,如果失败则返回非零值,在这种情况下,如果文件先前存在,则其原始名称仍然是已知的。实现可能导致重命名功能失败的原因之一是文件是打开的,或者有必要复制其内容以实现其重命名。
我突出显示了最后一段中的片段,因为它意味着任何其他原因可能导致失败,例如尝试更改目录,或者试图在蓝月亮的晚上6点之后调用它:-)
如果子目录位于同一个物理文件系统上,您会认为,至少类UNIX操作系统不会出现问题,因为它很可能是一个简单的inode移动。
但是,C标准似乎没有预先假定底层文件系统。