Exemple #1
0
static void *initproc_run(int arg1, void *arg2)
{
	switch(curtest)
	{       
	    case 0: return NULL;
		case 1:	processSetUp(); break;
		case 2: processSetUp(); break;
		case 3: processSetUp(); break;
		case 4: processSetUp(); break;
		case 5: processSetUp(); break;
		case 6: producer_consumer();break;
		case 7: deadlock();break;
		case 8: reader_writer();break;
		case 9: shellTest();break;
		case 10: dead_own(); break;
		case 11: vfs_test_setup(); break;
		case 12: add_tests(); break;
		case 13: ut_vmmap(); break;
		
	}
                
	   int status;
        while(!list_empty(&curproc->p_children))
        {
                pid_t child = do_waitpid(-1, 0, &status);
                /*dbg(DBG_INIT,"Process %d cleaned successfully\n", child);*/
        }
        
        return NULL;
}
int
ccnx_Portal_Reader(char *keystoreFileName, const char *password, const char *uri)
{
    parcSecurity_Init();

    PARCIdentity *identity = getIdentity_FromFile(keystoreFileName, password);

    if (identity != NULL) {
        CCNxPortalFactory *factory = ccnxPortalFactory_Create(identity);

        reader_writer(factory, uri);

        ccnxPortalFactory_Release(&factory);
        parcIdentity_Release(&identity);
    }

    parcSecurity_Fini();

    return 0;
}
int ejecutar_script(char* path_script, char* name_script, int(*reader_writer)(int fdreader, int fdwriter), pthread_mutex_t* mutex, int c_ftok){
/*
	key_t shmkey;
	int shmid;
	sem_t *sem;
	sem = sem_crear(&shmid, &shmkey, c_ftok);
*/
	int pipes[NUM_PIPES][2];
	pthread_mutex_lock(mutex);

	// pipes for parent to write and read

	if (pipe(pipes[PARENT_READ_PIPE]) == -1)
		handle_error("pipe");

	if ((pipe(pipes[PARENT_WRITE_PIPE])) == -1)
		handle_error("pipe");

	///////////////////////////////////////////
	pid_t  pid;
	pid = fork();
	pthread_mutex_unlock(mutex);
	if (pid  < 0){
		//handle_error("fork pipe stdin stdout");
		perror("fork!!!!!!!!!!!");
		return -1;
	}

	if (pid == 0) {
		if (dup2(pipes[PARENT_WRITE_PIPE][READ_FD], STDIN_FILENO) < 0) {
			perror("dup2 STDIN_FILENO");
			_exit(1);
		}
		if (dup2(pipes[PARENT_READ_PIPE][WRITE_FD], STDOUT_FILENO) < 0) {
			perror("dup2 STDIN_FILENO");
			_exit(1);
		}

		close(pipes[PARENT_WRITE_PIPE][READ_FD]);
		close(pipes[PARENT_READ_PIPE][WRITE_FD]);
		close(pipes[PARENT_READ_PIPE][READ_FD]);
		close(pipes[PARENT_WRITE_PIPE][WRITE_FD]);


		//execl("/usr/bin/sort", "sort", (char*) NULL);
		//sem_post(sem);

		int rs = 1;
		do {
			rs = execl(path_script, name_script, (char*) NULL);
			perror("Errro execv");
			fprintf(stderr, "hola path:%s, name: %s, Res: %d\n", path_script, name_script, rs);
			usleep(100000);

			_exit(127);
		} while (rs < 0);

		close(pipes[PARENT_READ_PIPE][READ_FD]);
		close(pipes[PARENT_WRITE_PIPE][WRITE_FD]);


		_exit(127);

	} else {
		/*
		printf("AAAAAAAAAAntes sem_wait(sem);\n");
		sem_wait(sem);
		printf("DDDDDDDDDESPUES sem_wait(sem);\n");

		shmctl(shmid, IPC_RMID, 0);
		sem_destroy (sem);
		*/

		int rs;

		rs = close(pipes[PARENT_WRITE_PIPE][READ_FD]);
		if(rs!=0){
			perror("close1");
		}
		rs = close(pipes[PARENT_READ_PIPE][WRITE_FD]);
		if(rs!=0){
			perror("close2");
		}

		rs = reader_writer(pipes[PARENT_READ_PIPE][READ_FD], pipes[PARENT_WRITE_PIPE][WRITE_FD]);
		int status;
		waitpid(pid, &status, 0);


		//puts("listo");
		return rs;
	}
}