Cod sursa(job #2053939)

Utilizator Consti.001FMI Dranca Constantin Consti.001 Data 1 noiembrie 2017 15:47:12
Problema A+B Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 1.26 kb
#include <sys/types.h>
#include<stdio.h>
#include<unistd.h>
#include<sys/wait.h>
#include<stdlib.h>
#include<errno.h>
#include<sys/mman.h>
#include<fcntl.h>
#include<sys/stat.h>
int main()
{

int n;

printf("Numarul de elemente: ");
scanf("%d", &n);

printf("\nElementele: ");

char shm_name[]="myshm";
int shm_fd;

size_t shm_size=n*1000;

if(ftruncate(shm_fd, shm_size) ==-1)
	{
	perror(NULL);
	shm_unlink(shm_name);
	return errno;
	}

shm_fd=shm_open(shm_name, O_CREAT|O_RDWR, S_IRUSR|S_IWUSR);
	if(shm_fd<0)
	{
	perror(NULL);
	return errno;
	}

int *shm_ptr=mmap(0, shm_size, PROT_READ, MAP_SHARED, shm_fd, 0);
if(shm_ptr==MAP_FAILED)
{
	perror(NULL);
	shm_unlink(shm_name);
	return errno;
}

int i=0; int *v;
v=(int *)malloc(n*sizeof(int));

for(i=0;i<n;i++)
{
	int a;
	scanf("%d", &a);
	v[i]=a;
}


for(i=0;i<n;++i)
	
{
	pid_t pid=fork();
		if(pid<0) return errno;

		else
		if(pid==0)
		{
			int *shm_ptrc=mmap(0,1000, PROT_WRITE, MAP_SHARED, shm_fd,i*1000);
			if(shm_ptrc==MAP_FAILED)
			{
				perror(NULL);
				shm_unlink(shm_name);
				return errno;
			}
			int q;
			q=v[i];
			printf("%d: ",q);
			while(q>1)
			{
			printf("%d ",q);
			if(q%2==0)
			q=q/2;
			else
			q=q*3+1;
			}
			printf("1 \n");
			perror(NULL);
			exit(0);
		}

}
for(i=0;i<n;++i)
	wait(NULL);
return 0;

}