From 9dd545d79faf1a53b1fb9d8cfdb81af57b1fc36e Mon Sep 17 00:00:00 2001 From: Jim Cromie Date: Wed, 7 Sep 2011 17:14:00 -0600 Subject: [PATCH] --- yaml --- r: 269016 b: refs/heads/master c: 56f3bae70638b33477a6015fd362ccfe354fd3ee h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/tools/perf/Documentation/perf-stat.txt | 11 ++++++++++- trunk/tools/perf/builtin-stat.c | 14 ++++++++++++++ 3 files changed, 25 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index 1532805e6995..4f0b8c5bda69 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: dcc101d1d02eb80ab0349c5410f8728412c35636 +refs/heads/master: 56f3bae70638b33477a6015fd362ccfe354fd3ee diff --git a/trunk/tools/perf/Documentation/perf-stat.txt b/trunk/tools/perf/Documentation/perf-stat.txt index 08394c4879a8..8966b9ab2014 100644 --- a/trunk/tools/perf/Documentation/perf-stat.txt +++ b/trunk/tools/perf/Documentation/perf-stat.txt @@ -95,12 +95,21 @@ corresponding events, i.e., they always refer to events defined earlier on the c line. -o file:: --output file:: +--output file:: Print the output into the designated file. --append:: Append to the output file designated with the -o option. Ignored if -o is not specified. +--log-fd:: + +Log output to fd, instead of stderr. Complementary to --output, and mutually exclusive +with it. --append may be used here. Examples: + 3>results perf stat --log-fd 3 -- $cmd + 3>>results perf stat --log-fd 3 --append -- $cmd + + + EXAMPLES -------- diff --git a/trunk/tools/perf/builtin-stat.c b/trunk/tools/perf/builtin-stat.c index bec64a9e741c..a43c68051078 100644 --- a/trunk/tools/perf/builtin-stat.c +++ b/trunk/tools/perf/builtin-stat.c @@ -196,6 +196,7 @@ static bool csv_output = false; static bool group = false; static const char *output_name = NULL; static FILE *output = NULL; +static int output_fd; static volatile int done = 0; @@ -1080,6 +1081,8 @@ static const struct option options[] = { OPT_STRING('o', "output", &output_name, "file", "output file name"), OPT_BOOLEAN(0, "append", &append_file, "append to the output file"), + OPT_INTEGER(0, "log-fd", &output_fd, + "log output to fd, instead of stderr"), OPT_END() }; @@ -1166,6 +1169,10 @@ int cmd_stat(int argc, const char **argv, const char *prefix __used) if (output_name && strcmp(output_name, "-")) output = NULL; + if (output_name && output_fd) { + fprintf(stderr, "cannot use both --output and --log-fd\n"); + usage_with_options(stat_usage, options); + } if (!output) { struct timespec tm; mode = append_file ? "a" : "w"; @@ -1177,6 +1184,13 @@ int cmd_stat(int argc, const char **argv, const char *prefix __used) } clock_gettime(CLOCK_REALTIME, &tm); fprintf(output, "# started on %s\n", ctime(&tm.tv_sec)); + } else if (output_fd != 2) { + mode = append_file ? "a" : "w"; + output = fdopen(output_fd, mode); + if (!output) { + perror("Failed opening logfd"); + return -errno; + } } if (csv_sep)