无法为C程序使用/ proc / self / exe的readlink

时间:2016-09-27 08:13:10

标签: c shell

int len = readlink (filename, target_path, sizeof (target_path));
char buffer[1024];

if(len ==-1)
{
    perror("readlink");
}

else
{
    target_path[len] = '\0';
    printf("executable path: %s\n", target_path);
}

这是相关部分的代码。我得到的唯一输出是readlink: No such file or directory,当我需要的是可执行文件的名称,即a.out。

1 个答案:

答案 0 :(得分:0)

#include<stdio.h>
#include<stdlib.h>
#include<errno.h>
#include<sys/utsname.h>
#include<string.h>
#include<unistd.h>
#include<sys/types.h>
#include<pwd.h>
#include<sys/wait.h>
#include<signal.h>

int main(int argc, char * argv[]) {
    char filename[1000];
    printf("pid --- %s\n",argv[1]);
    sprintf(filename,"/proc/%s/status",argv[1]);
    FILE *f = fopen(filename, "r");
    FILE *fp;

    char state,buf[1024];
    fgets(buf,1024,f);
    fgets(buf,1024,f);
    sscanf(buf, "State: %c\n", &state);
    printf("process state = %c\n", state);
    fclose(f);
    char target_path[1024];
    sprintf(filename, "/proc/%s/exe",argv[1]);
    int len = readlink (filename, target_path, sizeof (target_path));
    char buffer[1024];
    if(len ==-1)
    {
        perror("readlink");
    }
    else
    {
        target_path[len] = '\0';
        printf("executable path: %s\n", target_path);
    }
return 0;
}

问题出在我的sprintf声明中。语法错误 facepalm