2016-04-04 17 views
2

İşlem belleğini qnx'de almak istiyorum. Bir kabukta, sonucu showmem -P pid komutunu kullanarak alabilirim. C komutu için bir boru açıyorum ama sonra komutun çıktısını ayrıştırmak istiyorum ama nasıl yapıldığını bilmiyorum.qnx üzerinde işlem belleği nasıl alınır

int main() 
{ 
    pid_t self; 
    FILE *fp; 
    char *command; 
    self=getpid(); 

    sprintf(command,"showmem -P %d",self); 
    fp = popen(command,"r"); 
    // Then I want to read the elements that results from this command line 
} 
+1

Aslında dize için bellek ayrılırken ile başlamak isteyebilirsiniz İşte

paylaşılan nesneleri yok varsayarak bir örnektir Komutun, bu yüzden, undeitialized pointer 'komutu' kullanılarak * tanımlanmamış bir davranışınız olmaz. Bir dizi iyi bir fikir olurdu. –

+1

Komutun çıktısını ayrıştırma probleminiz ile ilgili olarak, [popen' işlevi hakkında] okumak için iyi bir fikir olabilir (http://pubs.opengroup.org/onlinepubs/9699919799/functions/popen.html) . Bunu yaptıktan sonra, komut çıktısını nasıl okuyacağınızı ümit etmelisiniz. Ve yardımımızı sorduğumuzda, çıktının neye benzediğini gerçekten bilmiyorsak nasıl yardımcı olabiliriz? –

+0

Fscanf kullanarak belleği alabildim – Bionix1441

cevap

2

Popen ve showmem ile fikriniz mümkün. Bellek bilgisini çıkarmak için sonucu popen() 'den ayrıştırmanız yeterlidir.

int main(int argc, char *argv[]) { 
    pid_t self; 
    FILE *fp; 
    char command[30]; 
    const int MAX_BUFFER = 2048; 
    char buffer[MAX_BUFFER]; 
    char* p; 
    char* delims = { " ," }; 
    int memory[] = {-1, -1, -1, -1, -1 }; 
    int valueindex = -1; 
    int parserindex = 0; 
    self = getpid(); 
    sprintf(command, "showmem -P %d", self); 

    fp = popen(command, "r"); 
    if (fp) { 
     while (!feof(fp)) { 
      if (fgets(buffer, MAX_BUFFER, fp) != NULL) { 
       p = strtok(buffer, delims); 
       while (p != NULL) { 
        if (parserindex >=8 && parserindex <= 13) { 
         memory[++valueindex] = atoi(p); 
        } 
        p = strtok(NULL, delims); 
        parserindex +=1; 
       } 
      } 
     } 
     pclose(fp); 
    } 

    printf("Memory Information:\n"); 
    printf("Total: %i\n", memory[0]); 
    printf("Code: %i\n", memory[1]); 
    printf("Data: %i\n", memory[2]); 
    printf("Heap: %i\n", memory[3]); 
    printf("Stack: %i\n", memory[4]); 
    printf("Other: %i\n", memory[5]); 
    return EXIT_SUCCESS; 
} 

Bu program şu çıktıyı üretir:

Memory Information: 
Total: 851968 
Code: 741376 
Data: 24576 
Heap: 73728 
Stack: 12288 
Other: 0 
İlgili konular