Beispiel #1
0
static mapinfo *load_maps(int pid)
{
    char tmp[128];
    FILE *fp;
    mapinfo *mi, *last, *ret;
    
    sprintf(tmp, "/proc/%d/maps", pid);
    fp = fopen(tmp, "r");
    if(fp == 0) {
        LOGE("load_maps: unable to open maps file: %s", strerror(errno));
        return NULL;
    }

    ret = NULL;
    last = NULL;
    mi = malloc(sizeof(mapinfo));
    memset(mi, 0, sizeof(mapinfo));
    while(!read_mapinfo(fp, mi)) {
        LOGD("load_maps: %"PRIxPTR" %s %s", mi->start, mi->perm, mi->name);
        mi->pid = pid;
        if (ret == NULL) ret = mi;
        if (last != NULL) last->next = mi;
        last = mi;
        mi = malloc(sizeof(mapinfo));
        memset(mi, 0, sizeof(mapinfo));
    }

    fclose(fp);
    free(mi);
    return ret;
}
static void load_maps(int pid, stats_t* stats)
{
    char tmp[128];
    FILE *fp;
    
    sprintf(tmp, "/proc/%d/smaps", pid);
    fp = fopen(tmp, "r");
    if (fp == 0) return;

    read_mapinfo(fp, stats);
    fclose(fp);
}
static void load_maps(int pid, int *sharedPages, int *privatePages)
{
    char tmp[128];
    FILE *fp;
    
    sprintf(tmp, "/proc/%d/smaps", pid);
    fp = fopen(tmp, "r");
    if (fp == 0) return;
    
    while (read_mapinfo(fp, sharedPages, privatePages) != 0) {
        // Do nothing
    }
    fclose(fp);
}
mapinfo *load_maps(int pid, int verbose)
{
    char tmp[128];
    FILE *fp;
    mapinfo *milist = 0;
    mapinfo *mi;
    
    sprintf(tmp, "/proc/%d/smaps", pid);
    fp = fopen(tmp, "r");
    if(fp == 0) return 0;
    
    while((mi = read_mapinfo(fp)) != 0) {
            /* if not verbose, coalesce mappings from the same entity */
        if(!verbose && milist) {
            if((!strcmp(mi->name, milist->name) && (mi->name[0] != '[')) 
               || !strcmp(mi->name,"[lib_bss]")) {
                milist->size += mi->size;
                milist->rss += mi->rss;
                milist->pss += mi->pss;
                milist->shared_clean += mi->shared_clean;
                milist->shared_dirty += mi->shared_dirty;
                milist->private_clean += mi->private_clean;
                milist->private_dirty += mi->private_dirty;
                milist->end = mi->end;
                free(mi);
                continue;
            }
        }

        mi->next = milist;
        milist = mi;
    }
    fclose(fp);
    
    return milist;
}