Exemple #1
0
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);
	
}
Exemple #2
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;
}
Exemple #3
0
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;
}
Exemple #4
0
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;
}