#include #include #include /* getenv, exit */ #include #include #include "common.h" #include "message.h" #include "buffer.h" extern char link_task[]; extern pid_t Linkpid[NUMlinks]; extern pid_t Mergepid; extern STATUS_TABLE *status_table; extern LINK_TABLE *link_table[NUMlinks]; extern int LINKs; void start_links() { int i; int rcode; pid_t pid; char p1[10]; char p2[10]; // start the link tasks printf("starting %d links\n",status_table->num_links); for (i = 0; i < status_table->num_links; i++) { pid = fork(); if (pid == -1) { sprintf(message_buffer, "fork failed %d - This must be fixed - exiting.", errno); report_message(MSG_FAILURE); exit(1); } if (pid == 0) { // this is the child process - use exec to overlay the driver code sprintf(p1, "%d", i); sprintf(p2, "%d", Mergepid); rcode = execl(link_task, link_task, "-i", p1, "-m", p2, NULL); sprintf(message_buffer, "Link task %s returned %d - %s.", link_task, errno, strerror(errno)); report_message(MSG_FAILURE); return; } link_table[i]->link_status = INUSE; link_table[i]->link_pid = pid; Linkpid[i] = pid; status_table->link_pid[i] = pid; sprintf(message_buffer, "Link task has pid %d", pid); report_message(MSG_INFORMATION); } }