mirror of
git://git.sv.gnu.org/coreutils.git
synced 2026-08-10 02:30:27 +02:00
dd: add support for opening files in Concurrent I/O (CIO) mode
* src/dd.c (O_CIO): New flag. * src/dd.c (O_FULLBLOCK): Add O_CIO to the list of flags that O_FULLBLOCK should be greater than. * src/dd.c (flags): Give the name "cio" to the new O_CIO flag, mirroring the treatment of O_DIRECT. * src/dd.c (usage): Add a description of the new flag when it is available. * doc/coreutils.text (dd invocation): Describe the new flag. * NEWS: Mention the new feature.
This commit is contained in:
committed by
Jim Meyering
parent
680afe6751
commit
5c065bb0cb
@@ -4,6 +4,9 @@ GNU coreutils NEWS -*- outline -*-
|
||||
|
||||
** New features
|
||||
|
||||
dd accepts iflag=cio and oflag=cio to open the file in CIO (concurrent I/O)
|
||||
mode where this feature is available.
|
||||
|
||||
ls --color now highlights hard linked files, too
|
||||
|
||||
stat -f recognizes the Lustre file system type
|
||||
|
||||
@@ -7729,6 +7729,14 @@ If you combine this flag with the @samp{of=@var{file}} operand,
|
||||
you should also specify @samp{conv=notrunc} unless you want the
|
||||
output file to be truncated before being appended to.
|
||||
|
||||
@item cio
|
||||
@opindex cio
|
||||
@cindex concurrent I/O
|
||||
Use concurrent I/O mode for data. This mode performs direct I/O
|
||||
and drops the @acronym{POSIX} requirement to serialize all I/O to the same file.
|
||||
A file cannot be opened in CIO mode and with a standard open at the
|
||||
same time.
|
||||
|
||||
@item direct
|
||||
@opindex direct
|
||||
@cindex direct I/O
|
||||
|
||||
@@ -66,6 +66,12 @@ static void process_signals (void);
|
||||
# define SIGINFO SIGUSR1
|
||||
#endif
|
||||
|
||||
/* This may belong in GNULIB's fcntl module instead.
|
||||
Define O_CIO to 0 if it is not supported by this OS. */
|
||||
#ifndef O_CIO
|
||||
# define O_CIO 0
|
||||
#endif
|
||||
|
||||
#if ! HAVE_FDATASYNC
|
||||
# define fdatasync(fd) (errno = ENOSYS, -1)
|
||||
#endif
|
||||
@@ -264,6 +270,7 @@ enum
|
||||
/* Use a value that is larger than that of any other O_ symbol. */
|
||||
O_FULLBLOCK = ((MAX (O_APPEND,
|
||||
MAX (O_BINARY,
|
||||
MAX (O_CIO,
|
||||
MAX (O_DIRECT,
|
||||
MAX (O_DIRECTORY,
|
||||
MAX (O_DSYNC,
|
||||
@@ -272,7 +279,7 @@ enum
|
||||
MAX (O_NOFOLLOW,
|
||||
MAX (O_NOLINKS,
|
||||
MAX (O_NONBLOCK,
|
||||
MAX (O_SYNC, O_TEXT)))))))))))) << 1)
|
||||
MAX (O_SYNC, O_TEXT))))))))))))) << 1)
|
||||
};
|
||||
|
||||
/* Ensure that we didn't shift it off the end. */
|
||||
@@ -288,6 +295,7 @@ static struct symbol_value const flags[] =
|
||||
{
|
||||
{"append", O_APPEND},
|
||||
{"binary", O_BINARY},
|
||||
{"cio", O_CIO},
|
||||
{"direct", O_DIRECT},
|
||||
{"directory", O_DIRECTORY},
|
||||
{"dsync", O_DSYNC},
|
||||
@@ -508,6 +516,8 @@ Each FLAG symbol may be:\n\
|
||||
\n\
|
||||
append append mode (makes sense only for output; conv=notrunc suggested)\n\
|
||||
"), stdout);
|
||||
if (O_CIO)
|
||||
fputs (_(" cio use concurrent I/O for data\n"), stdout);
|
||||
if (O_DIRECT)
|
||||
fputs (_(" direct use direct I/O for data\n"), stdout);
|
||||
if (O_DIRECTORY)
|
||||
|
||||
Reference in New Issue
Block a user