Exemple #1
0
int main(void)
{
#if _DEBUG
	freopen("input.txt","r", stdin);
#endif
	input_proc();
	do_something();
	output_proc();
	return 0;
}
Exemple #2
0
/**
 * @author  Tom Nightingale
 *
 * @brief   The program's entry point.
 * @details Initializes the processes and ports for IPC.
 */
int main() {  
  int pfd[3][2];
  int i = 0;
  int pid[2];

  // Put keyboard into raw mode
  system("stty raw -icanon igncr -echo");
  
  // Open the pipes.
  for (i = 0; i < 3; i++) {
    if (pipe(pfd[i]) < 0) {
      fatal("pipe call");
    }
  }
  
  // Create 2 child processes; OUTPUT_PROC & TRANSLATE_PROC.
  for (i = 0; i < 2; i++) {
    if ((pid[i] = fork()) <= 0) {
      switch (i) {
        // Output process.
        case OUTPUT_PROC:
          
          // Closing unused pipe descriptors.
          close(pfd[PIPE_INPUT_OUTPUT][WRITE]);
          close(pfd[PIPE_TRANS_OUTPUT][WRITE]);
          close(pfd[PIPE_INPUT_TRANSLATE][READ]);
          close(pfd[PIPE_INPUT_TRANSLATE][WRITE]);
          
          output_proc(pfd[PIPE_INPUT_OUTPUT][READ], pfd[PIPE_TRANS_OUTPUT][READ]);
          return 0;

        // Translate process.  
        case TRANSLATE_PROC:
          
          // Closing unused pipe descriptors.
          close(pfd[PIPE_INPUT_TRANSLATE][WRITE]);
          close(pfd[PIPE_TRANS_OUTPUT][READ]);
          close(pfd[PIPE_INPUT_OUTPUT][READ]);
          close(pfd[PIPE_INPUT_OUTPUT][WRITE]);
          
          translate_proc(pfd[PIPE_INPUT_TRANSLATE][READ], pfd[PIPE_TRANS_OUTPUT][WRITE]);
          return 0;
      }
    }
  }
  

  // Input process (parent).

  // Closing unused pipe descriptors.
  close(pfd[PIPE_INPUT_OUTPUT][READ]);
  close(pfd[PIPE_INPUT_TRANSLATE][READ]);
  close(pfd[PIPE_TRANS_OUTPUT][READ]);
  close(pfd[PIPE_TRANS_OUTPUT][WRITE]);
  input_proc(pid, pfd[PIPE_INPUT_OUTPUT][WRITE], pfd[PIPE_INPUT_TRANSLATE][WRITE]);
  
  // Return keyboard state.
  system("stty -raw icanon -igncr echo");
  
  return 0;
}