void* read_file(void* argv){ int i, file; char buffer[NUM_CHARS] = ""; struct arg_struct *argumentos = (struct arg_struct *)argv; file = open_lock_file(argumentos->file_name); lseek(file, NUM_CHARS-1 + ((argumentos->parte * (NUM_LINES-1) / NUM_THREADS) * (NUM_CHARS-1)) ,SEEK_SET); for(i = 0; i < (NUM_LINES-1) / NUM_THREADS; i++){ read(file,buffer,NUM_CHARS-1); if(strcmp(buffer,argumentos->comp_string)!=0){ /*Retorna -1*/ printf("Parte: %d ERROR\n",argumentos -> parte ); close(file); errado = 1; pthread_exit((void*) -1); } } /* SUCESS*/ printf("Parte: %d SUCESS\n",argumentos -> parte); close(file); pthread_exit((void*)0); }
static krb5_error_code NDBM_open(krb5_context context, HDB *db, int flags, mode_t mode) { krb5_error_code ret; struct ndbm_db *d = malloc(sizeof(*d)); if(d == NULL) { krb5_set_error_message(context, ENOMEM, "malloc: out of memory"); return ENOMEM; } d->db = dbm_open((char*)db->hdb_name, flags, mode); if(d->db == NULL){ ret = errno; free(d); krb5_set_error_message(context, ret, "dbm_open(%s): %s", db->hdb_name, strerror(ret)); return ret; } ret = open_lock_file(context, db->hdb_name, &d->lock_fd); if (ret) { ret = errno; dbm_close(d->db); free(d); krb5_set_error_message(context, ret, "open(lock file): %s", strerror(ret)); return ret; } db->hdb_db = d; if((flags & O_ACCMODE) == O_RDONLY) ret = hdb_check_db_format(context, db); else ret = hdb_init_db(context, db); if(ret == HDB_ERR_NOENTRY) return 0; if (ret) { NDBM_close(context, db); krb5_set_error_message(context, ret, "hdb_open: failed %s database %s", (flags & O_ACCMODE) == O_RDONLY ? "checking format of" : "initialize", db->hdb_name); } return ret; }
int main(int argc, char *argv[]) { struct timeval tvstart; int contador = 0 , i, file; char buffer[NUM_CHARS] = ""; char first[NUM_CHARS]= ""; char filename[] = FILE_NAME; char letters[NUM_STRINGS][NUM_CHARS] = {AAA,BBB,CCC,DDD,EEE,FFF,GGG,HHH,III,JJJ}; gettimeofday(&tvstart, NULL); srand((tvstart.tv_sec) * 1000 + (tvstart.tv_usec) / 1000 ); file = open_lock_file(filename, argv[1]); read(file, buffer, NUM_CHARS-1); strcpy(first,buffer); if((confirma_string(first, letters)) != 0){ close_unlock_file(file); printf("Something went wrong (Confirma String)...\n\n\n"); return -1; } while(strcmp(buffer,first) == 0){ i = read(file, buffer,NUM_CHARS-1); contador++; if(i == 0){ close_unlock_file(file); printf("Check!\n"); return !(contador == NUM_LINES); } } printf("Something went wrong (Durante a Leitura)...\n"); close_unlock_file(file); return -1; }
static krb5_error_code NDBM_rename(krb5_context context, HDB *db, const char *new_name) { int ret; char *old_dir, *old_pag, *new_dir, *new_pag; int old_lock_fd, new_lock_fd; /* lock old and new databases */ ret = open_lock_file(context, db->hdb_name, &old_lock_fd); if (ret) return ret; ret = hdb_lock(old_lock_fd, HDB_WLOCK); if(ret) { close(old_lock_fd); return ret; } ret = open_lock_file(context, new_name, &new_lock_fd); if (ret) { hdb_unlock(old_lock_fd); close(old_lock_fd); return ret; } ret = hdb_lock(new_lock_fd, HDB_WLOCK); if(ret) { hdb_unlock(old_lock_fd); close(old_lock_fd); close(new_lock_fd); return ret; } asprintf(&old_dir, "%s.dir", db->hdb_name); asprintf(&old_pag, "%s.pag", db->hdb_name); asprintf(&new_dir, "%s.dir", new_name); asprintf(&new_pag, "%s.pag", new_name); ret = rename(old_dir, new_dir) || rename(old_pag, new_pag); if (ret) { ret = errno; if (ret == 0) ret = EPERM; krb5_set_error_message(context, ret, "rename: %s", strerror(ret)); } free(old_dir); free(old_pag); free(new_dir); free(new_pag); hdb_unlock(new_lock_fd); hdb_unlock(old_lock_fd); close(new_lock_fd); close(old_lock_fd); if(ret) return ret; free(db->hdb_name); db->hdb_name = strdup(new_name); return 0; }