* [PATCH] user-cr: add --output-fd to write output to a specific fd
@ 2009-10-25 22:13 Oren Laadan
[not found] ` <1256508801-2426-1-git-send-email-orenl-RdfvBDnrOixBDgjK7y7TUQ@public.gmane.org>
0 siblings, 1 reply; 4+ messages in thread
From: Oren Laadan @ 2009-10-25 22:13 UTC (permalink / raw)
To: containers-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA
This is useful if the user would like redirect the output to
e.g, a socket or any other already open file descriptor when
invoking 'checkpoint'.
Also useful if the user would like to append an existing file.
Signed-off-by: Oren Laadan <orenl-eQaUEPhvms7ENvBUuze7eA@public.gmane.org>
---
checkpoint.c | 47 +++++++++++++++++++++++++++++++++++++++++------
1 files changed, 41 insertions(+), 6 deletions(-)
diff --git a/checkpoint.c b/checkpoint.c
index c116daf..aef954b 100644
--- a/checkpoint.c
+++ b/checkpoint.c
@@ -32,12 +32,14 @@ static char usage_str[] =
"\tOptions:\n"
" -h,--help print this help message\n"
" -o,--output=FILE write data to FILE instead of standard output\n"
+" --output-fd=FD write data to file descriptor FD instead of stdout\n"
" -c,--container require the PID is a container-init\n"
" -v,--verbose verbose output\n"
"";
struct args {
char *output;
+ int outputfd;
int container;
int verbose;
};
@@ -53,17 +55,33 @@ static void usage(char *str)
exit(1);
}
+/* negative retval means error */
+static int str2num(char *str)
+{
+ char *nptr;
+ int num;
+
+ num = strtol(str, &nptr, 10);
+ if (nptr - str != strlen(str))
+ num = -1;
+ return num;
+}
+
static void parse_args(struct args *args, int argc, char *argv[])
{
static struct option opts[] = {
{ "help", no_argument, NULL, 'h' },
{ "output", required_argument, NULL, 'o' },
+ { "output-fd", required_argument, NULL, 1 },
{ "container", no_argument, NULL, 'c' },
{ "verbose", no_argument, NULL, 'v' },
{ NULL, 0, NULL, 0 }
};
static char optc[] = "hvco:";
+ /* defaults */
+ args->outputfd = -1;
+
while (1) {
int c = getopt_long(argc, argv, optc, opts, NULL);
if (c == -1)
@@ -76,6 +94,13 @@ static void parse_args(struct args *args, int argc, char *argv[])
case 'o':
args->output = optarg;
break;
+ case 1:
+ args->outputfd = str2num(optarg);
+ if (args->outputfd < 0) {
+ printf("checkpoint: invalid file descriptor\n");
+ exit(1);
+ }
+ break;
case 'c':
args->container = 1;
break;
@@ -86,6 +111,12 @@ static void parse_args(struct args *args, int argc, char *argv[])
usage(usage_str);
}
}
+
+ if (args->output && args->outputfd >= 0) {
+ printf("Invalid used of both -o/--output and --output-fd\n");
+ exit(1);
+ }
+
}
int main(int argc, char *argv[])
@@ -111,19 +142,23 @@ int main(int argc, char *argv[])
exit(1);
}
- /* output file (default: stdout) */
+ /* output file */
if (args.output) {
- ret = open(args.output, O_RDWR | O_CREAT, 0);
- if (ret < 0) {
+ args.outputfd = open(args.output, O_RDWR | O_CREAT, 0);
+ if (args.outputfd < 0) {
perror("open output file");
exit(1);
}
- if (dup2(ret, STDOUT_FILENO) < 0) {
+ }
+
+ /* output file descriptor (default: stdout) */
+ if (args.outputfd >= 0) {
+ if (dup2(args.outputfd, STDOUT_FILENO) < 0) {
perror("dup2 output file");
exit(1);
}
- if (ret != STDOUT_FILENO)
- close(ret);
+ if (args.outputfd != STDOUT_FILENO)
+ close(args.outputfd);
}
ret = checkpoint(pid, STDOUT_FILENO, flags);
--
1.6.0.4
^ permalink raw reply related [flat|nested] 4+ messages in thread[parent not found: <1256508801-2426-1-git-send-email-orenl-RdfvBDnrOixBDgjK7y7TUQ@public.gmane.org>]
* Re: [PATCH] user-cr: add --output-fd to write output to a specific fd [not found] ` <1256508801-2426-1-git-send-email-orenl-RdfvBDnrOixBDgjK7y7TUQ@public.gmane.org> @ 2009-10-26 16:50 ` Serge E. Hallyn 2009-10-26 17:43 ` Matt Helsley 1 sibling, 0 replies; 4+ messages in thread From: Serge E. Hallyn @ 2009-10-26 16:50 UTC (permalink / raw) To: Oren Laadan; +Cc: containers-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA Quoting Oren Laadan (orenl-RdfvBDnrOixBDgjK7y7TUQ@public.gmane.org): > This is useful if the user would like redirect the output to > e.g, a socket or any other already open file descriptor when > invoking 'checkpoint'. > > Also useful if the user would like to append an existing file. > > Signed-off-by: Oren Laadan <orenl-eQaUEPhvms7ENvBUuze7eA@public.gmane.org> Acked-by: Serge Hallyn <serue-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org> > --- > checkpoint.c | 47 +++++++++++++++++++++++++++++++++++++++++------ > 1 files changed, 41 insertions(+), 6 deletions(-) > > diff --git a/checkpoint.c b/checkpoint.c > index c116daf..aef954b 100644 > --- a/checkpoint.c > +++ b/checkpoint.c > @@ -32,12 +32,14 @@ static char usage_str[] = > "\tOptions:\n" > " -h,--help print this help message\n" > " -o,--output=FILE write data to FILE instead of standard output\n" > +" --output-fd=FD write data to file descriptor FD instead of stdout\n" > " -c,--container require the PID is a container-init\n" > " -v,--verbose verbose output\n" > ""; > > struct args { > char *output; > + int outputfd; > int container; > int verbose; > }; > @@ -53,17 +55,33 @@ static void usage(char *str) > exit(1); > } > > +/* negative retval means error */ > +static int str2num(char *str) > +{ > + char *nptr; > + int num; > + > + num = strtol(str, &nptr, 10); > + if (nptr - str != strlen(str)) > + num = -1; > + return num; > +} > + > static void parse_args(struct args *args, int argc, char *argv[]) > { > static struct option opts[] = { > { "help", no_argument, NULL, 'h' }, > { "output", required_argument, NULL, 'o' }, > + { "output-fd", required_argument, NULL, 1 }, > { "container", no_argument, NULL, 'c' }, > { "verbose", no_argument, NULL, 'v' }, > { NULL, 0, NULL, 0 } > }; > static char optc[] = "hvco:"; > > + /* defaults */ > + args->outputfd = -1; > + > while (1) { > int c = getopt_long(argc, argv, optc, opts, NULL); > if (c == -1) > @@ -76,6 +94,13 @@ static void parse_args(struct args *args, int argc, char *argv[]) > case 'o': > args->output = optarg; > break; > + case 1: > + args->outputfd = str2num(optarg); > + if (args->outputfd < 0) { > + printf("checkpoint: invalid file descriptor\n"); > + exit(1); > + } > + break; > case 'c': > args->container = 1; > break; > @@ -86,6 +111,12 @@ static void parse_args(struct args *args, int argc, char *argv[]) > usage(usage_str); > } > } > + > + if (args->output && args->outputfd >= 0) { > + printf("Invalid used of both -o/--output and --output-fd\n"); > + exit(1); > + } > + > } > > int main(int argc, char *argv[]) > @@ -111,19 +142,23 @@ int main(int argc, char *argv[]) > exit(1); > } > > - /* output file (default: stdout) */ > + /* output file */ > if (args.output) { > - ret = open(args.output, O_RDWR | O_CREAT, 0); > - if (ret < 0) { > + args.outputfd = open(args.output, O_RDWR | O_CREAT, 0); > + if (args.outputfd < 0) { > perror("open output file"); > exit(1); > } > - if (dup2(ret, STDOUT_FILENO) < 0) { > + } > + > + /* output file descriptor (default: stdout) */ > + if (args.outputfd >= 0) { > + if (dup2(args.outputfd, STDOUT_FILENO) < 0) { > perror("dup2 output file"); > exit(1); > } > - if (ret != STDOUT_FILENO) > - close(ret); > + if (args.outputfd != STDOUT_FILENO) > + close(args.outputfd); > } > > ret = checkpoint(pid, STDOUT_FILENO, flags); > -- > 1.6.0.4 > > _______________________________________________ > Containers mailing list > Containers-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org > https://lists.linux-foundation.org/mailman/listinfo/containers ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] user-cr: add --output-fd to write output to a specific fd [not found] ` <1256508801-2426-1-git-send-email-orenl-RdfvBDnrOixBDgjK7y7TUQ@public.gmane.org> 2009-10-26 16:50 ` Serge E. Hallyn @ 2009-10-26 17:43 ` Matt Helsley [not found] ` <20091026174305.GI31446-52DBMbEzqgQ/wnmkkaCWp/UQ3DHhIser@public.gmane.org> 1 sibling, 1 reply; 4+ messages in thread From: Matt Helsley @ 2009-10-26 17:43 UTC (permalink / raw) To: Oren Laadan; +Cc: containers-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA On Sun, Oct 25, 2009 at 06:13:21PM -0400, Oren Laadan wrote: > This is useful if the user would like redirect the output to > e.g, a socket or any other already open file descriptor when > invoking 'checkpoint'. > > Also useful if the user would like to append an existing file. > > Signed-off-by: Oren Laadan <orenl-eQaUEPhvms7ENvBUuze7eA@public.gmane.org> > --- > checkpoint.c | 47 +++++++++++++++++++++++++++++++++++++++++------ > 1 files changed, 41 insertions(+), 6 deletions(-) > > diff --git a/checkpoint.c b/checkpoint.c > index c116daf..aef954b 100644 > --- a/checkpoint.c > +++ b/checkpoint.c > @@ -32,12 +32,14 @@ static char usage_str[] = > "\tOptions:\n" > " -h,--help print this help message\n" > " -o,--output=FILE write data to FILE instead of standard output\n" > +" --output-fd=FD write data to file descriptor FD instead of stdout\n" > " -c,--container require the PID is a container-init\n" > " -v,--verbose verbose output\n" > ""; > > struct args { > char *output; > + int outputfd; > int container; > int verbose; > }; > @@ -53,17 +55,33 @@ static void usage(char *str) > exit(1); > } > > +/* negative retval means error */ > +static int str2num(char *str) > +{ > + char *nptr; > + int num; > + > + num = strtol(str, &nptr, 10); > + if (nptr - str != strlen(str)) > + num = -1; > + return num; > +} It'd be nice to see common functions in a shared .o between checkpoint and restart. Cheers, -Matt Helsley ^ permalink raw reply [flat|nested] 4+ messages in thread
[parent not found: <20091026174305.GI31446-52DBMbEzqgQ/wnmkkaCWp/UQ3DHhIser@public.gmane.org>]
* Re: [PATCH] user-cr: add --output-fd to write output to a specific fd [not found] ` <20091026174305.GI31446-52DBMbEzqgQ/wnmkkaCWp/UQ3DHhIser@public.gmane.org> @ 2009-10-26 19:39 ` Oren Laadan 0 siblings, 0 replies; 4+ messages in thread From: Oren Laadan @ 2009-10-26 19:39 UTC (permalink / raw) To: Matt Helsley; +Cc: containers-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA yeah .. I was lazy .. will add another patch. Oren. Matt Helsley wrote: > On Sun, Oct 25, 2009 at 06:13:21PM -0400, Oren Laadan wrote: >> This is useful if the user would like redirect the output to >> e.g, a socket or any other already open file descriptor when >> invoking 'checkpoint'. >> >> Also useful if the user would like to append an existing file. >> >> Signed-off-by: Oren Laadan <orenl-eQaUEPhvms7ENvBUuze7eA@public.gmane.org> >> --- >> checkpoint.c | 47 +++++++++++++++++++++++++++++++++++++++++------ >> 1 files changed, 41 insertions(+), 6 deletions(-) >> >> diff --git a/checkpoint.c b/checkpoint.c >> index c116daf..aef954b 100644 >> --- a/checkpoint.c >> +++ b/checkpoint.c >> @@ -32,12 +32,14 @@ static char usage_str[] = >> "\tOptions:\n" >> " -h,--help print this help message\n" >> " -o,--output=FILE write data to FILE instead of standard output\n" >> +" --output-fd=FD write data to file descriptor FD instead of stdout\n" >> " -c,--container require the PID is a container-init\n" >> " -v,--verbose verbose output\n" >> ""; >> >> struct args { >> char *output; >> + int outputfd; >> int container; >> int verbose; >> }; >> @@ -53,17 +55,33 @@ static void usage(char *str) >> exit(1); >> } >> >> +/* negative retval means error */ >> +static int str2num(char *str) >> +{ >> + char *nptr; >> + int num; >> + >> + num = strtol(str, &nptr, 10); >> + if (nptr - str != strlen(str)) >> + num = -1; >> + return num; >> +} > > It'd be nice to see common functions in a shared .o between > checkpoint and restart. > > Cheers, > -Matt Helsley > ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2009-10-26 19:39 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-10-25 22:13 [PATCH] user-cr: add --output-fd to write output to a specific fd Oren Laadan
[not found] ` <1256508801-2426-1-git-send-email-orenl-RdfvBDnrOixBDgjK7y7TUQ@public.gmane.org>
2009-10-26 16:50 ` Serge E. Hallyn
2009-10-26 17:43 ` Matt Helsley
[not found] ` <20091026174305.GI31446-52DBMbEzqgQ/wnmkkaCWp/UQ3DHhIser@public.gmane.org>
2009-10-26 19:39 ` Oren Laadan
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.