logoISU  

CS469/569 - Linux and Unix Administration and Networking

Spring 2022

Displaying ./code/02-24/mem.c

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>

int sig_count = 0;

void sig_handler(int signum) {
  sig_count++;
  printf("Signal recieved, %d times.\n", sig_count);
  if (sig_count > 1) exit(0);
}

int main(int argc, char *argv[]) {
  if (argc < 3) {
    printf("Usage: ./mem.o stack_size heap_size\n"
	   "  size's expressed in KB\n");
    exit(0);
  }
  int stack_size = atoi(argv[1])*1000,
    heap_size = atoi(argv[2])*1000;
  char ch;

  signal(SIGINT, sig_handler);

  printf("About to declare stack array.  Enter to continue. ");
  scanf("%c", &ch);

  char stack_var[stack_size];

  printf("About to use stack array.  Enter to continue. ");
  scanf("%c", &ch);

  for(int i=0; i < stack_size; i++)
    stack_var[i] = (char) i;

  printf("About to malloc heap array.  Enter to continue. ");
  scanf("%c", &ch);

  char * h = (char *) malloc(heap_size);

  printf("About to use heap array.  Enter to continue. ");
  scanf("%c", &ch);

  for(int i=0; i < heap_size; i++)
    h[i] = (char) i;

  printf("About to seg fault.  Enter to continue. ");
  scanf("%c", &ch);
  int *p = 0;
  *p = 1; // seg fault
  
  return 0;
}