Cod sursa(job #2072622)

Utilizator Consti.001FMI Dranca Constantin Consti.001 Data 21 noiembrie 2017 23:37:05
Problema A+B Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 1.03 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>
#include<string.h>
int main()
{
	int i=0;
	int n;
	printf("Introdu n: ");
	scanf ("%d" ,&n);
	int* v=(int*)malloc(n*sizeof(int));
	for(i=0;i<n;i++)
	scanf("%d",&v[i]);
	printf("Numerle: ");
	char nume_mem[]="memoria";
	int memo;
	memo=shm_open(nume_mem, O_CREAT | O_RDWR, S_IRUSR | S_IWUSR);
	if(memo<0)
	{
	perror(NULL);
	return errno;
	}
	
	
	size_t memo_size=512*(n-1);
	if(ftruncate(memo,memo_size)==-1)
	{
	perror(NULL);
	shm_unlink(nume_mem);
	return errno;
	}
	for(i=0;i<n;++i)
	{
		void *mem_ptr=mmap(0,512,PROT_WRITE,MAP_SHARED, memo, i*512);
		
		int c;
		int a=v[i];
		pid_t pid= fork();
		if(pid<0) return errno;
		else
		
		if(pid==0)
		{
		c=snprintf(mem_ptr,512,"%d: ",a);
		while(a!=1)
		{
		if(n%2==1)
		n=n*3+1;
		else
		n=n/2;
		
		c+=snprintf(mem_ptr+c,512-c," ");
		munmap(nume_mem,512);
		}
		}
	}
	for(i=0;i<n;i++)
	{
	int copil=wait(NULL);

	}
	return 0;
}