Как получить имя исполняемого файла из идентификатора процесса в 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);
}