2016-09-27 5 views
-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); 
} 

これは関連するセクションのコードです。私が得る唯一の出力はreadlink: No such file or directoryです。私が必要とするのは、実行可能ファイル名、つまりa.outです。Cプログラムの/ proc/self/exeにreadlinkを使用できません

+2

あなたは 'ssize_t length = readlink("/proc/self/exe "、target_path、sizeof(target_path));'でコードを提供することができる[mcve] – sjsam

+1

を投稿してください。ハードコーディングされたパスでテストしましたか? – dvhh

答えて

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

関連する問題