/** * Close a bus * * @param bus Bus information * @return 0 on success, -1 on error */ int bus_close(bus_t *bus) { bus->sem_id = -1; if (bus->message) t(close_shared_memory(bus)); bus->message = NULL; return 0; fail: return -1; }
int main(int argc, char *argv[]) { int sig=-1; int pid=-1; char *in; sigNameStruct *sigNamePtr = sigNames; if (argc < 3 || argv[1][0] != '-') { USAGE: fprintf(stderr,"Sample usage: winkill -INT 232423, to interrupt the process 232423 "); {int i = 0; fprintf(stderr,"\nargv[1][0]=%c,%d",argv[1][0],argv[1][0]); fprintf(stderr,"\nCalled with: argc=%d <",argc); while (i < argc) fprintf(stderr, " %s",argv[i++]); fprintf(stderr,">\n"); } exit(1); } in = &(argv[1][1]); if (sscanf(&(argv[1][1]),"%d",&sig)==0) { while(sigNamePtr->name) { if (strcmp(sigNamePtr->name,in)==0) { sig = sigNamePtr->signumber; break; } sigNamePtr++; } } if (sig<0) { fprintf(stderr,"[had sig=%d]\n", sig); goto USAGE; } if (sscanf(argv[2],"%d",&pid)!=1 ) { fprintf(stderr,"sscanf(argv[2],\"%d\",&pid) failed for %s,%d", argv[2],atoi(argv[2])); goto USAGE; } sprintf(sharedMemory.name,"gcl-%d",pid); { int value; int *at; value = signal_mask(sig); sharedMemory.handle = OpenFileMapping(FILE_MAP_WRITE, /* Read/write permission. */ FALSE, /* Do not inherit the name */ sharedMemory.name); /* of the mapping object. */ if (sharedMemory.handle == NULL) { ErrorHandler("winkill: Could not open file-mapping object."); } sharedMemory.address = MapViewOfFile(sharedMemory.handle, /* Handle to mapping object. */ FILE_MAP_WRITE, /* Read/write permission. */ 0, /* Max. object size. */ 0, /* Size of hFile. */ 0); /* Map entire file. */ if (sharedMemory.address == NULL) { ErrorHandler("winkill: Could not map view of file."); } at = (int *)(sharedMemory.address); *at |= value; close_shared_memory(); exit(0); } }
void close_shared_memory1() { refcount=0; close_shared_memory(NULL); }
int main(int argc, char** argv) { if (argc < 2) { fprintf(stderr, "Too few arguments given to server.\n./server N\n"); exit(EXIT_FAILURE); } int server_id = atoi(argv[1]); pdecryptf_t decrypt = choose_decryption(server_id); char mq_name[13]; sprintf(mq_name, "/mq_server_%d", server_id); mqd_t mq = open_msg_queue(mq_name); Command cmd; int ret = receive_command(mq, &cmd); if (ret == -1) exit(EXIT_FAILURE); Command *command = &cmd; mqd_t ret_mq; while(strcmp(command->name, "exit") != 0) { //open shared memory char* shm_name = command->name; int shm_size = command->dim; int shm_fd; void* mem = open_shared_memory(shm_name, shm_size, &shm_fd); if (mem == NULL) { exit(EXIT_FAILURE); } // get size of the message from the first // integer in the shared memory int dim_message; memcpy(&dim_message, mem, sizeof(int)); // decrypt message void* out = malloc(1000); int decrypt_size = decrypt(mem+sizeof(int), dim_message, out); // copy result back in shared memory memcpy(mem, &decrypt_size, sizeof(int)); memcpy(mem + sizeof(int), out, decrypt_size); // Close shared memory close_shared_memory(mem, shm_size, shm_fd, shm_name); // Send message back to gateway with self removed int i; for (i = 1; i < 17; i++) command->crypt[i-1] = command->crypt[i]; ret_mq = open_msg_queue(MQ_GATEWAY); ret = send_command(ret_mq, command); if (ret == -1) exit(EXIT_FAILURE); mq_close(ret_mq); // Get another message from the mq ret = receive_command(mq, command); if (ret == -1) exit(EXIT_FAILURE); } mq_close(mq); mq_close(ret_mq); return 0; }