X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=filesetup.c;h=1f1259d1ac156bd99666b73e8a6a71ecdd4d28ee;hp=610981b437594d32c90587178b323c2ce6dcc348;hb=4d9345ae968ca92ace3dab06c25a9b73159cb329;hpb=165faf16657c17b924a84e5601e17a516c76c135 diff --git a/filesetup.c b/filesetup.c index 610981b4..1f1259d1 100644 --- a/filesetup.c +++ b/filesetup.c @@ -15,7 +15,7 @@ static int file_ok(struct thread_data *td, struct fio_file *f) { struct stat st; - if (td->filetype != FIO_TYPE_FILE) + if (td->filetype != FIO_TYPE_FILE || (td->io_ops->flags & FIO_NULLIO)) return 0; if (stat(f->file_name, &st) == -1) @@ -332,29 +332,38 @@ static int setup_file(struct thread_data *td, struct fio_file *f) if (td->io_ops->flags & FIO_NETIO) return 0; - if (td->odirect) - flags |= OS_O_DIRECT; - if (td->sync_io) - flags |= O_SYNC; - if (td_write(td) || td_rw(td)) { - flags |= O_RDWR; + /* + * we need a valid file descriptor, but don't create a real file. + * lets just dup stdout, seems like a sensible approach. + */ + if (td->io_ops->flags & FIO_NULLIO) + f->fd = dup(STDOUT_FILENO); + else { + if (td->odirect) + flags |= OS_O_DIRECT; + if (td->sync_io) + flags |= O_SYNC; + + if (td_write(td) || td_rw(td)) { + flags |= O_RDWR; - if (td->filetype == FIO_TYPE_FILE) { - if (!td->overwrite) - flags |= O_TRUNC; + if (td->filetype == FIO_TYPE_FILE) { + if (!td->overwrite) + flags |= O_TRUNC; - flags |= O_CREAT; - } + flags |= O_CREAT; + } - f->fd = open(f->file_name, flags, 0600); - } else { - if (td->filetype == FIO_TYPE_CHAR) - flags |= O_RDWR; - else - flags |= O_RDONLY; + f->fd = open(f->file_name, flags, 0600); + } else { + if (td->filetype == FIO_TYPE_CHAR) + flags |= O_RDWR; + else + flags |= O_RDONLY; - f->fd = open(f->file_name, flags); + f->fd = open(f->file_name, flags); + } } if (f->fd == -1) {