如何从/ proc / pid /打印信息

时间:2016-03-08 15:24:46

标签: c linux

今天第二个问题,第一个问题确实有帮助。

所以这是我的代码:

<controls:PageHeader x:Name="pageHeader" Text="Main Page" Padding="0,0,283,0">
    <!--  place stretched, across top  -->
    <RelativePanel.AlignTopWithPanel>True</RelativePanel.AlignTopWithPanel>
    <RelativePanel.AlignLeftWithPanel>True</RelativePanel.AlignLeftWithPanel>
    <RelativePanel.AlignRightWithPanel>True</RelativePanel.AlignRightWithPanel>
    <!--  secondary commands  -->
    <controls:PageHeader.SecondaryCommands>
        <AppBarButton Click="{x:Bind ViewModel.GotoSettings}" Label="Settings" />
        <AppBarButton Click="{x:Bind ViewModel.GotoPrivacy}" Label="Privacy" />
        <AppBarButton Click="{x:Bind ViewModel.GotoAbout}" Label="About" />
    </controls:PageHeader.SecondaryCommands>
</controls:PageHeader>
<AutoSuggestBox Margin="0,8,12,0" Width="270" QueryIcon="Find" PlaceholderText="Search">
    <RelativePanel.AlignRightWithPanel>True</RelativePanel.AlignRightWithPanel>
</AutoSuggestBox>

我获取了Name,State,UID和Username以及VmPeak的信息。他们按照我想要的方式工作。但其他3个是我似乎无法使它们工作的问题,我无法弄清楚原因(完整路径,写入存储层和等待通道的字节)。所以我的问题是如何访问它们并打印信息。

1 个答案:

答案 0 :(得分:1)

如alk所示,修改你的getWaitChannel()以为通道分配内存。当不需要频道数据时,您需要在以后释放内存。

char *getWaitChannel(int pid)
{
    FILE* statusf4;
    char path[40];
    char buf4[100];
    char *channel;
    channel = malloc(1024);
    /* Add error handling for malloc failure here */

    snprintf(path, 40, "/proc/%d/stack", pid);
    statusf4 = fopen(path, "r");
    if(statusf4 == NULL)
        return "";

    while(fgets(buf4,sizeof buf4, statusf4) != NULL){
    sscanf(buf4,"[<c0227f4e>] %s", channel);
    return channel;
}
}

检查代码并查看是否有任何其他变量(例如fullpath)需要内存分配,并通过注释代码的某些部分来执行逐步调试以捕获错误。