diff options
author | trz <trz> | 2005-10-19 19:35:35 +0000 |
---|---|---|
committer | trz <trz> | 2005-10-19 19:35:35 +0000 |
commit | 08c68653dd3dc7921339dfe4627c464ef4249faa (patch) | |
tree | 39fce1e3feea2bb68ecb3dad2aad51d3f3fa601c /runtime | |
parent | 707cb4bfb6e6e918dba16021ca0ae29671660d68 (diff) | |
download | systemtap-steved-08c68653dd3dc7921339dfe4627c464ef4249faa.tar.gz systemtap-steved-08c68653dd3dc7921339dfe4627c464ef4249faa.tar.xz systemtap-steved-08c68653dd3dc7921339dfe4627c464ef4249faa.zip |
fixes part of PR1194 (passing -o option to stpd)
Diffstat (limited to 'runtime')
-rw-r--r-- | runtime/stpd/ChangeLog | 10 | ||||
-rw-r--r-- | runtime/stpd/librelay.c | 15 | ||||
-rw-r--r-- | runtime/stpd/stpd.c | 14 |
3 files changed, 34 insertions, 5 deletions
diff --git a/runtime/stpd/ChangeLog b/runtime/stpd/ChangeLog index 01a8ef18..2fd03259 100644 --- a/runtime/stpd/ChangeLog +++ b/runtime/stpd/ChangeLog @@ -1,5 +1,15 @@ 2005-10-19 Tom Zanussi <zanussi@us.ibm.com> + * librelay.c: Move output_file var to stpd.c. + (stp_main_loop): If the output_file option was specified, + and streaming mode is being used, send output to the file + instead of stdout. If !streaming, send output to the file + instead of probe.out. + * stpd.c (usage): Add comment for -o option. + (main): Add -o option. + +2005-10-19 Tom Zanussi <zanussi@us.ibm.com> + * librelay.c (merge_output): Switch to binary TIMESTAMP. * stp_dump.c (main): Switch to binary TIMESTAMP. * stp_merge.c (main): Switch to binary TIMESTAMP. diff --git a/runtime/stpd/librelay.c b/runtime/stpd/librelay.c index b173b5d5..9ed408d9 100644 --- a/runtime/stpd/librelay.c +++ b/runtime/stpd/librelay.c @@ -58,8 +58,8 @@ static char *percpu_tmpfilebase = "stpd_cpu"; static char proc_filebase[128]; static int proc_file[NR_CPUS]; -/* probe output written here */ -static char *outfile_name = "probe.out"; +/* probe output written here, if non-NULL */ +extern char *outfile_name; /* internal variables */ static int transport_mode; @@ -652,6 +652,7 @@ int stp_main_loop(void) struct transport_start ts; void *data; int type; + FILE *ofp = stdout; pthread_mutex_init(&processing_mutex, NULL); @@ -700,13 +701,20 @@ int stp_main_loop(void) fprintf(stderr, "ERROR: couldn't init relayfs, exiting\n"); exit(1); } + } else if (outfile_name) { + ofp = fopen (outfile_name, "w"); + if (!ofp) { + fprintf (stderr, "ERROR: couldn't open output file %s: errcode = %s\n", + outfile_name, strerror(errno)); + exit(1); + } } ts.pid = 0; // FIXME. not implemented yet send_request(STP_START, &ts, sizeof(ts)); break; } case STP_REALTIME_DATA: - fputs ((char *)data, stdout); + fputs ((char *)data, ofp); break; case STP_OOB_DATA: fputs ((char *)data, stderr); @@ -732,5 +740,6 @@ int stp_main_loop(void) fprintf(stderr, "WARNING: ignored netlink message of type %d\n", (type)); } } + fclose(ofp); return 0; } diff --git a/runtime/stpd/stpd.c b/runtime/stpd/stpd.c index 2fecc380..9587d29f 100644 --- a/runtime/stpd/stpd.c +++ b/runtime/stpd/stpd.c @@ -41,10 +41,14 @@ unsigned int buffer_size = 0; char *modname = NULL; char *modpath = NULL; char *target_cmd = NULL; +char *outfile_name = NULL; /* relayfs base file name */ static char stpd_filebase[1024]; +/* if no output file name is specified, use this */ +#define DEFAULT_OUTFILE_NAME "probe.out" + /* stp_check script */ #ifdef PKGLIBDIR char *stp_check=PKGLIBDIR "/stp_check"; @@ -54,7 +58,7 @@ char *stp_check="stp_check"; static void usage(char *prog) { - fprintf(stderr, "\n%s [-m] [-p] [-q] [-r] [-c cmd ] [-t pid] [-b bufsize] kmod-name\n", prog); + fprintf(stderr, "\n%s [-m] [-p] [-q] [-r] [-c cmd ] [-t pid] [-b bufsize] [-o FILE] kmod-name\n", prog); fprintf(stderr, "-m Don't merge per-cpu files.\n"); fprintf(stderr, "-p Print only. Don't log to files.\n"); fprintf(stderr, "-q Quiet. Don't display trace to stdout.\n"); @@ -63,6 +67,7 @@ static void usage(char *prog) fprintf(stderr, " _stp_target will contain the pid for the command.\n"); fprintf(stderr, "-t pid. Sets _stp_target to pid.\n"); fprintf(stderr, "-b buffer size. The systemtap module will specify a buffer size.\n"); + fprintf(stderr, "-o FILE. Send output to FILE.\n"); fprintf(stderr, " Setting one here will override that value. The value should be\n"); fprintf(stderr, " an integer between 1 and 64 which be assumed to be the\n"); fprintf(stderr, " buffer size in MB. That value will be per-cpu if relayfs is used.\n"); @@ -74,7 +79,7 @@ int main(int argc, char **argv) int c, status; pid_t pid; - while ((c = getopt(argc, argv, "mpqrb:n:t:c:v")) != EOF) + while ((c = getopt(argc, argv, "mpqrb:n:t:c:vo:")) != EOF) { switch (c) { case 'm': @@ -110,6 +115,9 @@ int main(int argc, char **argv) case 'c': target_cmd = optarg; break; + case 'o': + outfile_name = optarg; + break; default: usage(argv[0]); } @@ -160,6 +168,8 @@ int main(int argc, char **argv) fprintf(stderr, "Could not execute %s\n", stp_check); exit(1); } + if (!outfile_name) + outfile_name = DEFAULT_OUTFILE_NAME; } sprintf(stpd_filebase, "/mnt/relay/%d/cpu", getpid()); |