#include <getopt.h>
#include "ustd.h"
-#include "localerr.h"
+#include "usterr.h"
#include "ustcomm.h"
-#include "share.h"
/* return value: 0 = subbuffer is finished, it won't produce data anymore
* 1 = got subbuffer successfully
char *sock_path=NULL;
char *trace_path=NULL;
int daemon_mode = 0;
+char *pidfile = NULL;
/* Number of active buffers and the mutex to protect it. */
int active_buffers = 0;
case 'd':
daemon_mode = 1;
break;
+ case 'p':
+ pidfile = strdup(optarg);
+ break;
case 'h':
usage();
exit(0);
terminate_req = 1;
}
+static int write_pidfile(const char *file_name, pid_t pid)
+{
+ FILE *pidfp;
+
+ pidfp = fopen(file_name, "w");
+ if(!pidfp) {
+ PERROR("fopen (%s)", pidfile);
+ WARN("killing child process");
+ return -1;
+ }
+
+ fprintf(pidfp, "%d\n", pid);
+
+ fclose(pidfp);
+
+ return 0;
+}
+
int start_ustd(int fd)
{
struct ustcomm_ustd ustd;
return 1;
}
+ /* Write pidfile */
+ if(pidfile) {
+ result = write_pidfile(pidfile, getpid());
+ if(result == -1) {
+ ERR("failed to write pidfile");
+ return 1;
+ }
+ }
+
/* Notify parent that we are successfully started. */
if(fd != -1) {
/* write any one character */
{
int result;
int fd[2];
+ pid_t child_pid;
result = pipe(fd);
- result = fork();
+ result = child_pid = fork();
if(result == -1) {
PERROR("fork");
return -1;