高手请时: 通过访问/proc 怎样获得进程的参数列表
发表于:2007-05-26来源:作者:点击数:
标签:
我的程序如下: intgetArgList(intfd,PROCSTAT*pProcStat,psinfo_t*pPsinfo) { char*argv[MAX_ARG_NUM]; intret,argIndex; intmemSize; intargc=pPsinfo-pr_argc; pProcStat-argc=argc; memSize=argc*sizeof(char*); de bug Msg(4,DebugLevel,"psinfoargc:%d
我的程序如下:
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 *);
de
bugMsg(4, DebugLevel, "psinfo argc: %d, memSize: %d, pointer: %u\n", argc, memSize, (ULONG)pPsinfo->pr_argv);
[b:1c7e4f6005]ret = pread(fd, argv, memSize, pPsinfo->pr_argv);[/b:1c7e4f6005]
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。
请高手回答怎样获得正确的参数列表。
ublue 回复于:2004-12-02 12:57:31
|
我已经采用另一种方式解决了。
psinfo_t结构中的pr_psargs可以获得参数列表。
|
sunlan 回复于:2004-12-02 13:14:19
|
通过访问/proc目录获取进程列表的通用性不是很好。一般性的做法是将ps的结果通过管道传送到程序里,然后再进行解析。
|
原文转自:http://www.ltesting.net
|