我是一個沒有經驗的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秒,但我需要提出另外兩個錯誤。 –