Как получить имя исполняемого файла из идентификатора процесса в C Linux

Я новичок в программировании на C Linux и для упражнения пытаюсь получить имя исполняемого файла из идентификатора процесса. Если я сам предоставляю идентификатор процесса, то он работает нормально, но если идентификатор процесса предоставляется динамически в цикле while, тогда readlink возвращает -1. Может ли кто-нибудь помочь мне, любая помощь приветствуется.

char exe[1024];
    int ret;
char *tempBuffer = calloc(1000,sizeof(char));
int result2 = sprintf(tempBuffer,"/proc/%d/exe", pid);
printf("%s\n", tempBuffer);

ret = readlink(tempBuffer,exe,1024);

if(ret ==-1) {
    fprintf(stderr,"ERRORRRRR\n");
    exit(1);
}
exe[ret] = 0;
printf("I am %s\n",exe);
free(tempBuffer);



while (running)
{
    recvmsg(sock_fd, &msg, 0);
    SYSCALL *data = (SYSCALL *)NLMSG_DATA(nlh);


    char *pname = get_process_name_by_pid(data->pid);


    printf("%i,%lu,%i,%s\n", data->sys_id, data->inode, data->pid, pname);
    insert_trace(conn, data->sys_id, data->inode, data->pid, pname);

    memset(NLMSG_DATA(nlh), 0, sizeof(SYSCALL));

}


void insert_trace(PGconn *conn,int sys_id, int memaddr, int pid, char* pname)
{          

    char * buffer = calloc(1000,sizeof(char));

    char exe[1024];
        int ret;
    char *tempBuffer = calloc(1000,sizeof(char));
    int result2 = sprintf(tempBuffer,"/proc/%d/exe", pid);
    printf("%s\n", tempBuffer);

    ret = readlink(tempBuffer,exe,1024);

    if(ret ==-1) {
        perror("ERRORRRRR\n");
        exit(1);
    }
    exe[ret] = 0;
    printf("I am %s\n",exe);
    free(tempBuffer);

    int result = sprintf(buffer, "INSERT INTO trace (datetime,syscall_id,memory_address,process_name,process_id) VALUES (CURRENT_DATE,  %d, %d, '%s', %d)", sys_id, memaddr, pname, pid);



PGresult *res = PQexec(conn, buffer);

free(buffer);



    if (PQresultStatus(res) != PGRES_COMMAND_OK) {
    printf("%d\n", 303030); 
        do_exit(conn, res);
    }else{
    printf("%d\n", 404040); 
    }
        PQclear(res);



}

0 ответов

Другие вопросы по тегам