Linux:无法通过ioctl从pid中检索进程名称

时间:2013-12-04 15:53:52

标签: linux suse

我正在尝试通过ioctl从pid中检索检索进程名称,这是C代码:

#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <dirent.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/signal.h>
#include <sys/syscall.h>
#include <sys/procfs.h>
#include <stdio.h>
#include <signal.h>
#include <elf.h>
#include <stdlib.h>
#include <errno.h>

int main(int argc, char **argv) {
char ProcID[50]="/proc/";
int          fd;
prpsinfo_t   ProcessInfo;
int          ioctlResult;

if ( argc != 2 ) {
    printf("usage: %s <pid>\n", argv[0]);
    return 0;
}

strcat(ProcID,argv[1]);
fd = open(ProcID, O_RDONLY, 0);

if (fd == -1) {
    printf("open error: [%d] [%s]\n",errno, strerror(errno));
    return 0;
}

ioctlResult = ioctl(fd, NT_PRPSINFO, &ProcessInfo);

if (ioctlResult == -1)
{
    printf("Error ioctl: [%d] [%s]\n",errno, strerror(errno));
} else {
    printf("Process name: %s\n",ProcessInfo.pr_fname);
}

close(fd);
return 0;
}

当我尝试执行它时,我获得了errno 25(设备的不适当的ioctl)。我认为在“/ proc /”上打开的文件描述符不正确;还有另一条需要考虑的途径吗?

0 个答案:

没有答案