Messages in this thread Patch in this message | | | From | Franck Bui-Huu <> | Subject | [PATCH] perf-record: auto detect when stdout is a pipe | Date | Sun, 16 Jan 2011 17:14:45 +0100 |
| |
From: Franck Bui-Huu <fbuihuu@gmail.com>
This patch gives the ability to perf-record to detect when its stdout has been redirected to a pipe. There's now no more need to add '-o -' switch in this case.
However '-o <path>' option has always precedence, that is if specified and stdout has been connected via a pipe then the output will go into the specified output.
Signed-off-by: Franck Bui-Huu <fbuihuu@gmail.com> --- tools/perf/builtin-record.c | 32 ++++++++++++++++++++------------ 1 files changed, 20 insertions(+), 12 deletions(-)
diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c index 7069bd3..4f86354 100644 --- a/tools/perf/builtin-record.c +++ b/tools/perf/builtin-record.c @@ -46,7 +46,7 @@ static unsigned int user_freq = UINT_MAX; static int freq = 1000; static int output; static int pipe_output = 0; -static const char *output_name = "perf.data"; +static const char *output_name = NULL; static int group = 0; static int realtime_prio = 0; static bool raw_samples = false; @@ -562,18 +562,26 @@ static int __cmd_record(int argc, const char **argv) exit(-1); } - if (!strcmp(output_name, "-")) - pipe_output = 1; - else if (!stat(output_name, &st) && st.st_size) { - if (write_mode == WRITE_FORCE) { - char oldname[PATH_MAX]; - snprintf(oldname, sizeof(oldname), "%s.old", - output_name); - unlink(oldname); - rename(output_name, oldname); + if (!output_name) { + if (!fstat(STDOUT_FILENO, &st) && S_ISFIFO(st.st_mode)) + pipe_output = 1; + else + output_name = "perf.data"; + } + if (output_name) { + if (!strcmp(output_name, "-")) + pipe_output = 1; + else if (!stat(output_name, &st) && st.st_size) { + if (write_mode == WRITE_FORCE) { + char oldname[PATH_MAX]; + snprintf(oldname, sizeof(oldname), "%s.old", + output_name); + unlink(oldname); + rename(output_name, oldname); + } + } else if (write_mode == WRITE_APPEND) { + write_mode = WRITE_FORCE; } - } else if (write_mode == WRITE_APPEND) { - write_mode = WRITE_FORCE; } flags = O_CREAT|O_RDWR; -- 1.7.3.2
| |