Esempio n. 1
0
File: daemon.c Progetto: numpad/ipc
int main(int argc, char *argv[]) {
	
	ipc_server srv = ipc_create("echo_socket");
	
	char buf[128];
	while (1) {
		/* call accept */
		puts("waiting for connection");
		ipc_server_accept(&srv);
		puts("connected!");

		/* handle connection and loop back to accept*/
		while (ipc_server_read(&srv, buf, 128)) {
			printf("-> '%.*s'\n", srv.msglen - 1, buf);
			if (!strncmp(buf, "end", 3)) {
				puts("closing");
				ipc_server_close(srv);
				exit(0);
			}

			ipc_server_send(&srv, buf, srv.msglen);
		}
		puts("client closed connection");
	}

	return 0;
}
Esempio n. 2
0
void init() {
    int i, j, k, pid;
    int string_length;
    int to_exec_length;
    char * to_exec;
    char * ct_bin = "bin/";

    ipc_destroy(server_params);
    ipc_create(server_params);
    ipc_open(server_params, O_RDONLY);

    ipc_destroy(server_receive_params);
    ipc_create(server_receive_params);
    ipc_open(server_receive_params, O_RDONLY|O_NONBLOCK);

    //sem_init(&sem,0,0);

    for(i = 0; i < CANT_INSTRUCTIONS; i++) {

        switch(pid = fork()) {
        case -1:
            perror("Fork exception");
            exit(1);
            break;
        case 0: /* Hijo */
            (*(process_list[i]))->pid = getpid();
            to_exec_length = strlen(process_name_list[i]) + BIN_LENGTH + 1;
            to_exec = calloc(1, to_exec_length);
            strcpy(to_exec, ct_bin);
            strcat(to_exec, process_name_list[i]);
            to_exec[to_exec_length - 1] = 0;
            execvp(to_exec, NULL);

            /* No deberia llegar aca */
            perror("Process error");
            exit(1);
            break;
        }
        (*(process_list[i]))->params->unique_id = pid;
        ipc_destroy((*process_list[i])->params);
        ipc_create((*process_list[i])->params);
        ipc_open((*(process_list[i]))->params, O_WRONLY);

    }

}
Esempio n. 3
0
void init()
{
	int i, j, k, pid, aux_semid;
	int string_length;
	int to_exec_length;
	char * to_exec;
	int ct_length;
	char * ct_path = get_ipc_path();
	
	ct_length = strlen(ct_path);
	
	ipc_create(server_params);
	ipc_open(server_params, O_RDONLY);
	
	aux_semid = init_sem();
	
	
	for(i = 0; i < CANT_INSTRUCTIONS; i++){
		
		switch(pid = fork()){
			case -1:
				perror("Fork exception");
				exit(1);
				break;
			case 0: /* Hijo */
				(*(process_list[i]))->pid = getpid();
				to_exec_length = strlen(process_name_list[i]) + ct_length + 1;
				to_exec = calloc(1, to_exec_length);
				strcpy(to_exec, ct_path);
				strcat(to_exec, process_name_list[i]);
				to_exec[to_exec_length - 1] = 0;
				execvp(to_exec, NULL);		
				/* No deberia llegar aca */
				perror("Process error");
				exit(1);
				break;
		}
		(*(process_list[i]))->params->unique_id = pid;
		(*process_list[i])->params->socklistener = TRUE;
		ipc_create((*process_list[i])->params);	
		ipc_open((*(process_list[i]))->params, O_WRONLY);
	}
	
	free(ct_path);

}
Esempio n. 4
0
int main(int argc, char ** argv){
	
	char * program_name;
	struct status cl_program;
	int i;
	ipc_params_t client_params;

	init_processes();

	if(argc > 1){
		program_name = argv[1];
	}else{
		printf("Entrada incorrecta\n");
		return 0;
	}

	client_params = get_params_from_pid(getpid(), PROGRAM_STATUS, sizeof(struct status));

	client_header_t header = calloc(1, sizeof(struct client_header));
	header->program_size = strlen(program_name);
	header->client_id = getpid();

	ipc_open(server_params, O_WRONLY);
	
	server_params->msg_type = PRE_HEADER;
	ipc_send(server_params, header, sizeof(struct client_header));
	
	server_params->msg_type = PROGRAM_STRING;
	ipc_send(server_params, program_name, header->program_size);
	
	ipc_close(server_params);
	
	ipc_create(client_params);
	ipc_open(client_params, O_RDONLY);
	while (!ipc_receive(client_params, &cl_program, sizeof(struct status)));
	ipc_close(client_params);
	ipc_destroy(client_params);
	
	for (i = 0; i < MEM_SIZE; i++){
		printf("%d ", cl_program.mem[i]);
	}
	printf("\n");

	return 0;
}
Esempio n. 5
0
int foo()
{
    struct calc_args calc;
    calc.left = 123;
    calc.right = 321;
    calc.opcode = '+';
    int ret;
    logi("calc string=\"%d %c %d\"\n", calc.left, calc.opcode, calc.right);
    struct ipc *ipc = ipc_create(IPC_CLIENT, 5555);
    logi("before ipc_call\n");
    if (0 != ipc_call(ipc, IPC_CALC, &calc, sizeof(calc), &ret, sizeof(ret))) {
        loge("ipc_call %d failed!\n", IPC_CALC);
        return -1;
    }
    logi("ipc_call IPC_CALC success!\n");
    logi("return value = %d\n", ret);
    ipc_destroy(ipc);
    return 0;
}
Esempio n. 6
0
void * run_server_receive(void * params){
	
	ipc_params_t client_params;
	status client_final;
	
	ipc_create(server_receive_params);
	ipc_open(server_receive_params, O_RDONLY|O_NONBLOCK);
	
	while(1){
		if(ipc_receive(server_receive_params, &client_final, sizeof(struct status))){
			client_params = get_params_from_pid(client_final.client_id, PROGRAM_STATUS, sizeof(struct status), server_params->semid);			
			client_params->socklistener = TRUE;
			printf("Answering to client: %d\n", client_final.client_id);
			ipc_open(client_params, O_WRONLY);
			ipc_send(client_params, &client_final, sizeof(struct status));
			ipc_close(client_params);
			free(client_params->file);
			free(client_params);
		}
		sleep(1);
	}
}
Esempio n. 7
0
int shell_test()
{
    char buf[1024];
    char cmd[512];
    int loop = 1;
    struct ipc *ipc = ipc_create(IPC_CLIENT, 5555);
    if (!ipc) {
        loge("ipc_create failed!\n");
        return -1;
    }
    while (loop) {
        memset(buf, 0, sizeof(buf));
        printf("hack shell$ ");
        scanf("%s", cmd);
        printf("cmd = %s\n", cmd);
        ipc_call(ipc, IPC_SHELL_HELP, cmd, sizeof(cmd), buf, sizeof(buf));
        printf("ret = %s\n", buf);
    }
    ipc_destroy(ipc);
    return 0;

}
Esempio n. 8
0
ipc_t ipc_establish(const char* name) {
    return ipc_create(name, 0);
}
Esempio n. 9
0
int ipc_listen(const char* name) {
    me = ipc_create(name, 1);
    return me == NULL ? -1 : 0;
}