我想将符号链接(symbolic link)指向的文件路径存储到 bufff
中。这适用于我当前使用 readlink
的实现,但它获取了我不需要的额外数据,因为我的 bufsize
是任意值的。我不确定如何根据符号链接(symbolic link)指向的路径调整它的大小,因为我所拥有的只是符号链接(symbolic link)的路径。这存储在 path
中,它是一个字符数组。如果我只有符号链接(symbolic link)的路径,我怎么知道用链接的直接路径字符串的大小来调整 bufff
的大小?
char bufff[100];
size_t bufsize = 100;
readlink(path,bufff,bufsize);
最佳答案
readlink()
函数返回复制到缓冲区的字节数,没有最后的 \0
。这意味着如果您使用 100 字节的缓冲区调用 readlink()
并且 readlink()
返回 100,则您需要更多空间(即使路径正好是 100 字节,你仍然需要至少 1 个字节来在末尾添加一个空字符。
解决方案是在循环中增加缓冲区:
size_t bufsize = 255; /* Initial buffer size */
ssize_t result;
char* buf = malloc(bufsize); /* Initial buffer allocation */
while ((result = readlink(path, buf, bufsize)) >= bufsize) {
/* We double the buffer size, so next call should succeed ! */
bufsize *= 2;
buf = realloc(buf, bufsize);
}
buf[result] = '\0';
警告:这只是一个示例,我们不会检查 readlink
是否在出错时返回 -1。 malloc
和 realloc
也一样。您应该检查现实世界中的错误。
关于c - 检索符号链接(symbolic link)的路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25816944/