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; }
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); } }
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); }
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; }
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; }
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); } }
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; }
ipc_t ipc_establish(const char* name) { return ipc_create(name, 0); }
int ipc_listen(const char* name) { me = ipc_create(name, 1); return me == NULL ? -1 : 0; }