FreeCalypso > hg > freecalypso-sw
diff rvinterf/rvtdump.c @ 169:e01e3a60c858
rvinterf: background mode implemented
author | Michael Spacefalcon <msokolov@ivan.Harhan.ORG> |
---|---|
date | Wed, 20 Nov 2013 02:58:35 +0000 |
parents | e0d56e9be8a2 |
children | 4d8e4c58df71 |
line wrap: on
line diff
--- a/rvinterf/rvtdump.c Tue Nov 19 06:06:42 2013 +0000 +++ b/rvinterf/rvtdump.c Wed Nov 20 02:58:35 2013 +0000 @@ -18,6 +18,7 @@ char *logfname; FILE *logF; time_t logtime; +int background; main(argc, argv) char **argv; @@ -27,9 +28,12 @@ int c; fd_set fds; - while ((c = getopt(argc, argv, "b:d:l:")) != EOF) + while ((c = getopt(argc, argv, "bB:d:l:")) != EOF) switch (c) { case 'b': + background++; + continue; + case 'B': baudrate_name = optarg; continue; case 'd': @@ -41,9 +45,13 @@ case '?': default: usage: fprintf(stderr, - "usage: %s [-b baudrate] ttyport\n", argv[0]); + "usage: %s [options] ttyport\n", argv[0]); exit(1); } + if (background && !logfname) { + fprintf(stderr, "%s: -b is meaningless without -l\n", argv[0]); + exit(1); + } if (target_fd <= 0) { if (argc - optind != 1) goto usage; @@ -61,6 +69,17 @@ fprintf(logF, "*** Log of decoded RVT output ***\n"); setlinebuf(logF); } + if (background) { + c = fork(); + if (c < 0) { + perror("fork"); + exit(1); + } + if (c) { + printf("rvtdump forked into background (pid %d)\n", c); + exit(0); + } + } for (;;) { FD_ZERO(&fds); FD_SET(target_fd, &fds); @@ -84,7 +103,8 @@ print_item() { - printf("%s\n", pr_item); + if (!background) + printf("%s\n", pr_item); if (logF) log_item(); }