perf-record: auto detect when stdout is a pipe
PATCH 1/1 perf-record: auto detect when stdout is a pipe
From: Franck Bui-Huu <[email protected]>
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.
--- tools/perf/builtin-record.c | 32 ++++++++++++++++++++------------ 1 files changed, 20 insertions(+), 12 deletions(-)
tools/perf/builtin-record.c +20 -12
@@ -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 ;
Signature · 1 line
1.7.3.2
Arnaldo Carvalho de Melo
AppliedEm Sun, Jan 16, 2011 at 05:14:45PM +0100, Franck Bui-Huu escreveu:
Quoted 10 lines
From: Franck Bui-Huu <[email protected]>
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.
I guess we could have that in perf report as well? I.e. if stdin is a FIFO...
Thanks, applied,
- Arnaldo
Quoted 7 lines · Arnaldo Carvalho de Melo
Em Sun, Jan 16, 2011 at 05:14:45PM +0100, Franck Bui-Huu escreveu:
Quoted 6 lines
From: Franck Bui-Huu <[email protected]>
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.
Quoted 8 lines
Quoted 4 lines
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.
I guess we could have that in perf report as well? I.e. if stdin is a FIFO...
Yes, I noticed that too, perf-script is also a candidate.
I'll do.
Franck
[tip:perf/core] perf record: auto detect when stdout is a pipe
In reply to Franck Bui-HuuCommit-ID: d7065adb9b4f3384c2615f0a3dbdb6c3aae1eb18 Gitweb: http://git.kernel.org/tip/d7065adb9b4f3384c2615f0a3dbdb6c3aae1eb18 Author: Franck Bui-Huu <[email protected]> AuthorDate: Sun, 16 Jan 2011 17:14:45 +0100 Committer: Arnaldo Carvalho de Melo <[email protected]> CommitDate: Mon, 24 Jan 2011 10:58:27 -0200
perf record: auto detect when stdout is a pipe
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.
LKML-Reference: <[email protected]>
--- tools/perf/builtin-record.c | 32 ++++++++++++++++++++------------ 1 files changed, 20 insertions(+), 12 deletions(-)
tools/perf/builtin-record.c +20 -12
@@ -48,7 +48,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 nodelay = false;
@@ -497,18 +497,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 ;