|
@@ -35,6 +35,7 @@ static unsigned int page_size;
|
|
|
static unsigned int mmap_pages = 128;
|
|
|
static int freq = 1000;
|
|
|
static int output;
|
|
|
+static int pipe_output = 0;
|
|
|
static const char *output_name = "perf.data";
|
|
|
static int group = 0;
|
|
|
static unsigned int realtime_prio = 0;
|
|
@@ -449,7 +450,9 @@ static int __cmd_record(int argc, const char **argv)
|
|
|
exit(-1);
|
|
|
}
|
|
|
|
|
|
- if (!stat(output_name, &st) && st.st_size) {
|
|
|
+ if (!strcmp(output_name, "-"))
|
|
|
+ pipe_output = 1;
|
|
|
+ else if (!stat(output_name, &st) && st.st_size) {
|
|
|
if (!force) {
|
|
|
if (!append_file) {
|
|
|
pr_err("Error, output file %s exists, use -A "
|
|
@@ -474,7 +477,10 @@ static int __cmd_record(int argc, const char **argv)
|
|
|
else
|
|
|
flags |= O_TRUNC;
|
|
|
|
|
|
- output = open(output_name, flags, S_IRUSR|S_IWUSR);
|
|
|
+ if (pipe_output)
|
|
|
+ output = STDOUT_FILENO;
|
|
|
+ else
|
|
|
+ output = open(output_name, flags, S_IRUSR | S_IWUSR);
|
|
|
if (output < 0) {
|
|
|
perror("failed to create output file");
|
|
|
exit(-1);
|
|
@@ -513,6 +519,8 @@ static int __cmd_record(int argc, const char **argv)
|
|
|
}
|
|
|
|
|
|
if (!child_pid) {
|
|
|
+ if (pipe_output)
|
|
|
+ dup2(2, 1);
|
|
|
close(child_ready_pipe[0]);
|
|
|
close(go_pipe[1]);
|
|
|
fcntl(go_pipe[0], F_SETFD, FD_CLOEXEC);
|
|
@@ -564,7 +572,11 @@ static int __cmd_record(int argc, const char **argv)
|
|
|
open_counters(cpumap[i]);
|
|
|
}
|
|
|
|
|
|
- if (file_new) {
|
|
|
+ if (pipe_output) {
|
|
|
+ err = perf_header__write_pipe(output);
|
|
|
+ if (err < 0)
|
|
|
+ return err;
|
|
|
+ } else if (file_new) {
|
|
|
err = perf_header__write(&session->header, output, false);
|
|
|
if (err < 0)
|
|
|
return err;
|