通过访问/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。

请高手回答怎样获得正确的参数列表。
...全文
133 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
ublue 2004-12-02
  • 打赏
  • 举报
回复
我已经采用另一种方式解决了。
psinfo_t结构中的pr_psargs可以获得参数列表。
yuanlei1978113 2004-12-02
  • 打赏
  • 举报
回复
来晚了. 恭喜.

23,121

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧