Esempio n. 1
0
main()
{
	FILE *in;
	int rtn,i;
	in = fopen ("/Users/laurenceschenk/mini-src/mySrc/Coldipozzo/type_1_sort","r");
	if (in == NULL) {
		perror ("Unable to open type_1_sort\n");
		exit (1);
	}
	rtn = shared_memory_attach();
	clear_shm();
	while (1)
	{
		rtn = fscanf(in,"%d\t%s\t%s\t%d",&etime,name,days,&action);
		if (rtn == EOF) break;
		printf ("Data read: name %s time %d days %s action %d\n",name,etime,days,action);
		//write_to_shm();
		rtn = get_name_index(name);
		if (( rtn > -1) && (rtn < NUM_DEVICES))
		{
			write_to_shm(rtn);
		} else {
			printf ("**********FAILURE to find %s\n",name);
			printf ("\n\n*****************program abort....\n");
			shared_memory_detach();
			exit(5);
		}
	}
	
	fclose(in);
	shared_memory_detach();
	printf("shm_type_1:main written %d records\n",ptr);
	exit(0);
}
void* thread_func(void* arg) {
    int socket_desc = (int) arg, proc_id, flag = 0;
    float left, right, result;
    char operation, message[100];

    Calculation msg = CALCULATION__INIT;
    Result res = RESULT__INIT;
    uint8_t calc_buf[1024],
            result_buf[1024];
    ssize_t len, result_len;

    len = recv(socket_desc, calc_buf, 1024, 0);
    deserialize_input(&msg, len, calc_buf, &left, &right, &operation, &proc_id);
    add_to_online(proc_id);
    while ((len = recv(socket_desc, calc_buf, 1024, 0))) {
        deserialize_input(&msg, len, calc_buf, &left, &right, &operation,
                &proc_id);
        result = calculate(left, right, operation);
        serialize_result(result_buf, &res, result, &result_len);
        sprintf(message, "Client %d calculated %f %c %f = %f\n", proc_id, left,
                operation, right, result);
        write_to_shm(message);
        send(socket_desc, result_buf, result_len, 0);
    }

    sprintf(message, "Client %d has disconnected\n", proc_id);
    remove_from_online(proc_id);
    notify(0, proc_id);

    close(socket_desc);
    active_connections--;
    printf("Active connections are: %d\n", active_connections);
    return NULL;
}