* Bootstrap program used for starting all three main processes.
*/
int main(void) {
-
+ /**
+ * Variable storing Process ID. In our case we need only to check if
+ * it's equal 0, to exec new program.
+ */
pid_t pid;
+
+ /** Index of the current process to spawn. */
int i = 0;
+
+ /** Error (theoretically) returned by execl. */
int err = 0;
for (; i < PROCESS_NUMBER; i++) {
/* If it is child fork */
if (pid == 0) {
- err = execl(processes[i], processes[i], NULL);
+ fprintf(stderr, "[%s] Forked process %d has id: %d\n", "bootstrap", i, getpid());
+
+ /*
+ * Create new session for this process, so it won't close
+ * after the parent process exit.
+ */
+ setsid();
+ err = execl(processes[i], NULL);
/*
* According to manual, this will only occur
"bootstrap", processes[i], strerror(errno));
}
}
+ /* There was an error when forking */
+ else if (pid < 0) {
+ fprintf(stderr, "[%s] Something went wrong when forking %s. Error: %s\n",
+ "bootstrap", processes[i], strerror(errno));
+ }
}
/* All processes should be now spawned. Close bootstrap program. */
-
+
return 0;
}
\ No newline at end of file
mkfifo(write_pipe, 0666);
file_descriptor = open(write_pipe, O_WRONLY);
-
+
+ fprintf(stderr, "[%s] Init!\n", "process1");
+
do {
c = fgetc(stdin);
write_descriptor = open(write_pipe, O_WRONLY);
int number_of_characters = 0;
-
+
+ fprintf(stderr, "[%s] Init!\n", "process2");
+
while(1) {
/* Read data from input pipe */
count = read(read_descriptor, buffer, BUFFER_STEP);
/* Reading from process2 */
read_descriptor = open(read_pipe, O_RDONLY);
+ fprintf(stderr, "[%s] Init!\n", "process3");
+
while(1) {
/* Read data from input pipe */
count = read(read_descriptor, &buffer, sizeof(int));