Каковы различные значения структуры rusage в аргументе системного вызова getrusage ()? - PullRequest
1 голос
/ 20 марта 2020

Мы используем getrusage () системный вызов, чтобы найти различные значения ресурсов, он принимает два аргумента, в которых первый аргумент RUSAGE_SELF или RUSAGE_CHILDREN , другой Аргументом является структура с именем rusage . Эта структура имеет много элементов, к которым можно получить доступ и дать значения, но что представляют все эти элементы?

#include <sys/resource.h>
#include <sys/time.h>
#include <unistd.h>

void print_cpu_time()
{
 struct rusage usage;
 getrusage (RUSAGE_SELF, &usage);
 printf ("CPU time: %ld.%06ld sec user, %ld.%06ld sec system\n",
     usage.ru_utime.tv_sec, usage.ru_utime.tv_usec,
     usage.ru_stime.tv_sec, usage.ru_stime.tv_usec);
}

int main()
{
    print_cpu_time();
} 

Эта программа показывает значения времени пользователя и системного времени.

Что представляют собой другие элементы структуры и как их можно использовать в реальных программах, таких как я получить значение 0 для всех других элементов структуры, если я пытаюсь получить к ним доступ. Итак, как я могу использовать их, чтобы получить значение, отличное от 0?

РЕДАКТИРОВАТЬ: Я написал программу для поиска значений ru_inblock и ru_oublock. Это дает вывод как 0 для ru_inblock и 8 для ru_oublock для любого заданного ввода. Почему это так? Код следующий:

#include <stdio.h>
#include <sys/resource.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>

// a struct to read and write 
struct person 
{ 
  int id; 
  char fname[20]; 
  char lname[20]; 
}; 

int main () 
{ 
  FILE *outfile; 
  char ch;
  struct person Stu;
int r;

  outfile = fopen ("student.dat", "w"); 
  if (outfile == NULL) 
  { 
    fprintf(stderr, "\nError opened file\n"); 
    exit (1); 
  } 
   do
              {
                      printf("\nEnter Roll : ");
                      scanf("%d",&Stu.id);
                      scanf("%*c");
                      printf("Enter First Name : ");
                      scanf("%s",Stu.fname);
                      scanf("%*c");
                      printf("Enter Last Name : ");
                      scanf("%s",Stu.lname);

                      fwrite(&Stu,sizeof(Stu),1,outfile);

                      printf("\nDo you want to add another data (y/n) : ");
                      scanf("%*c");
                      ch = getchar();


              }
            while(ch=='y' || ch == 'Y');



  if(fwrite != 0) 
    printf("contents to file written successfully !\n"); 
  else
    printf("error writing file !\n"); 
 fclose (outfile); 

 outfile = fopen ("student.dat", "r"); 
  if (outfile == NULL) 
  { 
    fprintf(stderr, "\nError opened file\n"); 
    exit (1); 
  } 

  struct person input; 

  while(fread(&input, sizeof(struct person), 1, outfile)) 
        printf ("id = %d name = %s %s\n", input.id, 
        input.fname, input.lname); 


 fclose (outfile);

  struct rusage r_usage;

  r=getrusage(RUSAGE_SELF,&r_usage);
  printf("\n%d\n",r);
  printf("Memory usage = %ld\n",r_usage.ru_maxrss);
  printf("\ninput operations : %ld \n", r_usage.ru_inblock);
  printf("\noutput operations : %ld \n", r_usage.ru_oublock);


  return 0; 
} 
...