Пример #1
0
int main(void)
{
#if _DEBUG
	freopen("input.txt","r", stdin);
#endif
	input_proc();
	do_something();
	output_proc();
	return 0;
}
Пример #2
0
void Trace(int level, const wchar_t* file, int line, const wchar_t *format, ...)
{
    WriteBufferProc output_proc = GetOutputWriter(level);

    if (output_proc)
    {
        wchar_t buffer[MAX_TRACE_BUFFER];
        va_list args;

        if (file && line)
        {
            swprintf_s(buffer, sizeof buffer / sizeof *buffer, L"[%s:%ld] (%d) ", file, line, level);
            output_proc(buffer);
        }

        va_start(args, format);

        if (format && vswprintf_s(buffer, sizeof buffer / sizeof *buffer, format, args) >= 0)
        {
            output_proc(buffer);
        }
    }
}
Пример #3
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;
}