Esempio n. 1
0
static int writeread(char *origfilename, char *newfilename) {
    char wbuf[write_size];
    int fd;

    for (int idx = 0; idx < write_size; idx++) {
        wbuf[idx] = randomchar();
    }

    v_printf("write: ");
    int bytes_written;
    fd = open(origfilename, O_RDWR | O_CREAT, 0640);
    if (fd < 0) {
        v_printf("OPEN ERROR: open failed on %s : %d %s\n", origfilename, errno, strerror(errno));
        return -1;
    }
    bytes_written = write(fd, wbuf, write_size);
    if (bytes_written != write_size) {
        v_printf("WRITE ERROR: bytes_written = %d, write_size = %d\n", bytes_written, write_size);
        return -3;
    }
    else {
        v_printf("Write Success: %s\n", origfilename);
    }

    sleep(10);

    if (rename(origfilename, newfilename) != 0) {
        v_printf("RENAME ERROR: old: %s; new: %s; errno: %d; err: %s\n", origfilename, newfilename, errno, strerror(errno));
        return -4;
    }

    close(fd);

    return 0;
}
Esempio n. 2
0
int main()
{
    srand(time(NULL)); // seed random function
    int i;
    Tnode* tree = add_tnode(tree,randomchar(length_string));  // initialize a tree

    for(i=0; i<num_nodes; i++)   //insert random elements
        insert(tree, randomchar(length_string) );

    printTree(tree); // print the tree once
    printf("--------free from now on-----------\n");
    freeTree(tree);  // go in the right order and free the tree

//    printTree(tree);  if this line added, it shows that the free function works
    return 0;
}
Esempio n. 3
0
static int writeread(char *basename, int results[], const int num_files, char failedfiles[FHFMAX][FHFSIZE]) {
    char wbuf[num_files][write_iters][one_write_size];
    char filename[PATH_MAX];
    int fd[num_files];
    int cdx = 0;

    for (int idx = 0; idx < num_files; idx++) {
        for (int jdx = 0; jdx < write_iters; jdx++) {
            for (int kdx = 0; kdx < one_write_size; kdx++) {
                wbuf[idx][jdx][kdx] = randomchar();
            }
        }
    }

    vv_printf("write: ");
    for (int idx = 0; idx < num_files; idx++) {
        int bytes_written;
        sprintf(filename, "%s-%d", basename, idx);
        fd[idx] = open(filename, O_RDWR | O_CREAT, 0640);
        if (fd[idx] < 0) {
            ++results[OpenErrors];
            v_printf("OPEN ERROR: open failed on %s : %d %s\n", filename, errno, strerror(errno));
        }
        else {
            if (!verbose) printf(".");
            printf("Shut valhalla down now! (systemctl stop nginx_valhalla.service\n");
            sleep(23);

            for (int jdx = 0; jdx < write_iters; jdx++) {
                bytes_written = write(fd[idx], wbuf[idx][jdx], one_write_size);
                if (bytes_written == -1) {
                    ++results[WriteErrors];
                    v_printf("WRITE ERROR: %s: bytes_written = -1, errno = %d (%s)\n", filename, errno, strerror(errno));
                    strcpy(failedfiles[cdx++], filename);
                }
                else if (bytes_written != one_write_size) {
                    ++results[WriteErrors];
                    v_printf("WRITE ERROR: %s: bytes_written = %d, one_write_size = %d\n", filename, bytes_written, one_write_size);
                }
                else {
                    ++results[Writes];
                    vv_printf("Write Success: %s\n", filename);
                }
                printf("Sleep between writes to better view journalctl output\n");
                sleep(2);
            }
            close(fd[idx]);
        }
    }

    v_printf("\n");
    return 0;
}
Esempio n. 4
0
File: bus.c Progetto: uselessd/bus
/**
 * Create a new bus
 * 
 * @param   file      The pathname of the bus, `NULL` to create a random one
 * @param   flags     `BUS_EXCL` (if `file` is not `NULL`) to fail if the file
 *                    already exists, otherwise if the file exists, nothing
 *                    will happen;
 *                    `BUS_INTR` to fail if interrupted
 * @param   out_file  Output parameter for the pathname of the bus
 * @return            0 on success, -1 on error
 */
int
bus_create(const char *file, int flags, char **out_file)
{
	int fd = -1, saved_errno;
	bus_t bus;
	char buf[1 + 2 * (3 * sizeof(ssize_t) + 2)];
	size_t ptr, len;
	ssize_t wrote;
	char *genfile = NULL;
	const char *env;

	if (out_file)
		*out_file = NULL;

	bus.sem_id = -1;
	bus.key_sem = -1;
	bus.key_shm = -1;
	bus.message = NULL;
	bus.first_poll = 0;

	srand((unsigned int)time(NULL) + (unsigned int)rand());

	if (file) {
		fd = open(file, O_WRONLY | O_CREAT | O_EXCL, DEFAULT_MODE);
		if (fd == -1) {
			if ((errno != EEXIST) || (flags & BUS_EXCL))
				return -1;
			goto done;
		}
	} else {
		env = getenv("XDG_RUNTIME_DIR");
		if (!env || !*env)
			env = "/run";
		genfile = malloc((strlen(env) + 6 + 7 + 30) * sizeof(char));
		if (!genfile)
			goto fail;
		if (out_file)
			*out_file = genfile;
		sprintf(genfile, "%s/bus", env);
		t(mkdirs(genfile, 0755));
		sprintf(genfile, "%s/bus/random.", env);
		len = strlen(genfile);
		genfile[len + 30] = '\0';
	retry:
		for (ptr = 0; ptr < 30; ptr++)
			genfile[len + ptr] = randomchar();
		fd = open(genfile, O_WRONLY | O_CREAT | O_EXCL, DEFAULT_MODE);
		if (fd == -1) {
			if (errno == EEXIST)
				goto retry;
			return -1;
		}
	}

	t(create_semaphores(&bus));
	t(create_shared_memory(&bus));

	sprintf(buf, "%zi\n%zi\n", (ssize_t)(bus.key_sem), (ssize_t)(bus.key_shm));
	for (len = strlen(buf), ptr = 0; ptr < len;) {
		wrote = write(fd, buf + ptr, len - ptr);
		if (wrote < 0) {
			if ((errno != EINTR) || (flags & BUS_INTR))
				goto fail;
		} else {
			ptr += (size_t)wrote;
		}
	}
	close(fd);

done:
	if (out_file && !*out_file) {
		len = strlen(file) + 1;
		*out_file = malloc(len * sizeof(char));
		memcpy(*out_file, file, len * sizeof(char));
	} else if (!out_file) {
		free(genfile);
	}
	return 0;

fail:
	saved_errno = errno;
	if (bus.key_sem)
		remove_semaphores(&bus);
	if (bus.key_shm)
		remove_shared_memory(&bus);
	if (fd == -1)
		close(fd);
	if (out_file)
		*out_file = NULL;
	free(genfile);
	unlink(file);
	errno = saved_errno;
	return -1;
}