#include <iostream>
#include <cstdlib>
#include <cstring>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <unistd.h>
#define SHM_KEY 1234

using namespace std;
int main(int argc, char **argv) {
	if (argc<2 || argc>3) {
		cout << "Usage:./as2 N [delete] " << endl;
		return 1;
	}
	int n=atoi(argv[1]);
	bool deleteShm=false;
	if (argc==3 && strcmp(argv[2],"delete")==0) {
		deleteShm=true;
	}
	int shmId=shmget(SHM_KEY,0,0666);
	if (shmId<0) {
		cout << "memory does not exist!" << endl;
		return 1;
	}
	cout << "Memory found with shmid=" << shmId << endl;
	int *matrix=(int *) shmat(shmId,NULL,0);
	for ( int row=0;row<n;row++) {
		for (int col=0;col<n;col++) {
			cout << matrix[row*n+col] << " ";
		}
		cout << endl;
	}
	if (deleteShm) {
		shmctl(shmId,IPC_RMID,NULL);
		cout << "Memory deleted!" << endl;
	}
	return 0;


}
