Beispiel #1
0
int main(int argc, char **argv)
{
  pid_t r;

  printf("size: %zu %zu\n", sizeof(struct psinfo), sizeof(size_t));

  r = fork();
  if (r>0) {
    int buffer_size = sizeof(psinfo_t) > 512 ? sizeof(psinfo_t) : 512;
    char *buffer;
    char filename[255];
    ssize_t count = 0;
    size_t rss = 0, size = 0;
    int foo, fd;
    psinfo_t psi = { 0 };
    pid_t t;
    int status;
    char model = 0;

    psi.pr_size = 0;
    psi.pr_rssize = 0;

    buffer = calloc(buffer_size, 1);
    filename[0] = 0;
    snprintf(filename, 255, "/proc/%d/psinfo", (int)r);
    fd = open(filename, O_RDONLY);
    exit_print(fd, NULL);
    do {
      size_t n;
      n = pread(fd, buffer, buffer_size, 0);
      if ((count != 0 && count != n) || n <= 0)
        fprintf(stderr, "Error reading proc: %zd vs %zd\n", count, n);
      else {
        count = n;
        if (n >= sizeof(psinfo_t)) {
          memcpy(&psi, buffer, sizeof(psinfo_t));
          rss = rss < psi.pr_rssize ? psi.pr_rssize : rss;
          size = size < psi.pr_size ? psi.pr_size : size;
          model = psi.pr_dmodel;
        }
      }
      t = waitpid(r, &status, WNOHANG);
      usleep(200);
    } while (t == 0 || !(WIFEXITED(status) || WIFSIGNALED(status) ||  WCOREDUMP(status)));
    printf("Needes rss: %zu size: %zu read: %zu model:%d\n", rss, size, count, (int)model);
    foo = close(fd);
    exit_print(foo, "(close)");
  } else if (r == 0)  {
    int foo;
    foo = execv(argv[1], argv+2);
    exit_print(foo, "(execv)");
  } else
    exit_print(r, "(fork)");
  return 0;
}
Beispiel #2
0
void		input_handler(LP **first, INF *infos, LP **curr, char *buf)
{
	if (BUFFER == UP_KEY || BUFFER == DOWN_KEY || BUFFER == LEFT_KEY ||
		BUFFER == RIGHT_KEY)
		lst_move(curr, first, buf);
	else if ((BUFFER > 96 && BUFFER < 123) || (infos->search &&
		(BUFFER == RET_KEY || BUFFER == DEL_KEY)))
		search(curr, infos, buf);
	else if (BUFFER == SPACE_KEY)
		select_entry(curr, infos);
	else if (BUFFER == SUP_KEY)
		lst_del(first, curr);
	else if (BUFFER == RET_KEY || BUFFER == ESC_KEY)
		exit_print(buf);
	infos->curr_page = (*curr)->page;
}