示例#1
0
long test_read(aio_context_t ctx, int fd, long range, int afd) {
	long i, n, r, j;
	u_int64_t eval;
	struct iocb **piocb;
	struct iocb *iocb;
	struct timespec tmo;
	static struct io_event events[NUM_EVENTS];
	static char buf[IORTX_SIZE];

	n = range / IORTX_SIZE;
	iocb = malloc(n * sizeof(struct iocb));
	piocb = malloc(n * sizeof(struct iocb *));
	if (!iocb || !piocb) {
		perror("iocb alloc");
		return -1;
	}
	for (i = 0; i < n; i++) {
		piocb[i] = &iocb[i];
		asyio_prep_pread(&iocb[i], fd, buf, sizeof(buf),
				 (n - i - 1) * IORTX_SIZE, afd);
		iocb[i].aio_data = (u_int64_t) i + 1;
	}
	fprintf(stdout, "submitting read request ...\n");
	if (io_submit(ctx, n, piocb) <= 0) {
		perror("io_submit");
		return -1;
	}
	for (i = 0; i < n;) {
		fprintf(stdout, "waiting ... ");
		waitasync(afd, -1);
		eval = 0;
		if (read(afd, &eval, sizeof(eval)) != sizeof(eval))
			perror("read");
		fprintf(stdout, "done! %llu\n", (unsigned long long) eval);
		while (eval > 0) {
			tmo.tv_sec = 0;
			tmo.tv_nsec = 0;
			r = io_getevents(ctx, 1, eval > NUM_EVENTS ? NUM_EVENTS: (long) eval,
					 events, &tmo);
			if (r > 0) {
				for (j = 0; j < r; j++) {

				}
				i += r;
				eval -= r;
				fprintf(stdout, "test_write got %ld/%ld results so far\n",
					i, n);
			}
		}
	}
	free(iocb);
	free(piocb);

	return n;
}
示例#2
0
文件: leda-io.c 项目: salmito/leda
int aio_submit_read(int fd, char * buf, int size, void * data) {
	int i, r;// j;
	struct iocb **piocb;
	struct iocb *iocb;

	iocb = malloc(sizeof(struct iocb));
	piocb = malloc(sizeof(struct iocb *));
	if (!iocb || !piocb) {
		return -1;
	}
	
	i=0;
	off_t offset = lseek( fd, 0, SEEK_CUR );
		piocb[i] = &iocb[i];
		asyio_prep_pread(&iocb[i], fd, buf, size,
				 offset, afd, data);
	if ((r = io_submit(ctx, 1, piocb)) <= 0) {
		return -1;
	}
	return r;
}