通过访问/proc 怎样获得进程的参数列表
ublue 2004-12-02 08:28:08 我的程序如下:
int getArgList(int fd, PROCSTAT * pProcStat, psinfo_t * pPsinfo)
{
char *argv[MAX_ARG_NUM];
int ret, argIndex;
int memSize;
int argc = pPsinfo->pr_argc;
pProcStat->argc = argc;
memSize = argc * sizeof(char *);
debugMsg(4, DebugLevel, "psinfo argc: %d, memSize: %d, pointer: %u\n", argc, memSize, (ULONG)pPsinfo->pr_argv);
ret = pread(fd, argv, memSize, pPsinfo->pr_argv);
if (ret <= 0)
{
errormsg(1, "read psinfo argv pointer vector fail, retvalue: %d, errno: %d\n", ret, errno);
return -3;
}
for (argIndex = 0; argIndex < argc; argIndex++)
{
if (pProcStat->argv[argIndex] == NULL)
{
errormsg(1, "read psinfo argv fail, argc %d, index: %d\n", argc, argIndex);
return -1;
}
ret = pread(fd, pProcStat->argv[argIndex], MAX_ARG_STRING, argv[argIndex]);
if (ret <= 0)
{
errormsg(1, "read psinfo argv fail, ret: %d, errno: %d\n",
ret, errno);
return -1;
}
debugMsg(4, DebugLevel, "index %d, argv: %s\n", argIndex, pProcStat->argv[argIndex]);
}
return 0;
}
在程序实际运行过程中,我有一个进程,其argc为3,但每次在执行
ret = pread(fd, argv, memSize, pPsinfo->pr_argv)
语句时,结果为:
ret=0, errno=0,
很郁闷的错误,实际上参数个数已经为3。
请高手回答怎样获得正确的参数列表。