我是一个没有经验的Linux程序员,并且正在尝试学习使用基于此question and answer的readlink()
。readlink将errno设置为ENOENT
我呼吁readlink()
返回-1,并将errno
2(ENOENT
)。
的代码:
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
#include <errno.h>
#include <iostream>
#include <algorithm>
#include <cstdio>
int main(int argc, char* argv[])
{
char szTmp[100];
snprintf(szTmp, 100, "proc/%d/exe", getpid());
std::cout << "szTmp is " << szTmp << std::endl;
char executingFolder[500];
errno = 0;
int bytes = std::min(readlink(szTmp, executingFolder, 500), (ssize_t)499);
if (bytes > 0)
{
executingFolder[bytes] = '\0';
}
std::cout << "bytes is " << bytes << std::endl;
std::cout << "errno is " << errno;
if (ENOENT == errno)
{
std::cout << " ENOENT";
}
std::cout << std::endl;
std::cout << "Executing folder is \"" << executingFolder << "\"" << std::endl;
return 0;
}
输出:
szTmp is proc/22272/exe
bytes is -1
errno is 2 ENOENT
Executing folder is ""
事情(一种从自PID更改一次迭代例子)我曾尝试:
- 编译后:
sudo ./a.out
(认为目录访问由于缺乏权限而受到限制)。结果:未改变的行为从./a.out
- SIGINT程序执行期间,并验证
/proc/<pid>/exe
存在。结果:它对于程序的每次运行都一直存在。 - 确认目标链接的值在499个字符以内。
有人可以帮忙找出问题吗?阅读readlink
手册页和在线说明以及着名的StackOverflow文章,我仍然不清楚什么是错误的。
谢谢。
我揍你了! –
谢谢,我明白你的解释和我的错误了。 – StoneThrow
@KeithThompson你的确做了约30秒,但我需要提出另外两个错误。 –