给定一个文件指针 fp 指向一个打开的文件,是否有一种可移植的方法来给它命名?在这种情况下不能使用函数 rename,因为我没有引用该文件的当前名称。
在 linux 上,你可以使用
linkat
int linkat(int olddirfd, const char *oldpath,
int newdirfd, const char *newpath, int flags);
通过指定
AT_EMPTY_PATH
标志。例如,像这样的东西:
linkat(fileno(fp), NULL, AT_FDCWD, "/path/to/new/name", AT_EMPTY_PATH);
请注意,这不会重命名原始文件,它只会创建一个新的硬链接(即新名称)。这种方法也是不可移植的,因为
AT_EMPTY_PATH
是一个linux扩展。