int main(int argc, char *argv[]){ char* serial_port_name; if (argc ==1){ serial_port_name = SERIALPORTDEFAULT; }else if (argc == 2){ // if a command line argument was supplied serial_port_name = argv[1]; // the argument is the name of the serial port to open }else if(argc > 2){ printf("Usage is: monitor [serial port name]\n"); } PRINTDEBUG&&printf("main called..\n"); mysetup_serial_port(serial_port_name); PRINTDEBUG&&printf("done setup...\n"); configureUI(); // setup the log file if (LOG) logfile = open("log",O_WRONLY|O_APPEND|O_CREAT,0666);// the 0666 is an octal number which sets up proper permissions so we can actually open the log file after writing to it //blank out the buffers clear_user_command_buffer(); clear_serial_command_buffer(); while(1){ read_from_serial_port(); // read in and buffer stuff in from the serial port buffer_input(); // buffer user input refresh(); // refresh the display } return quit(); }
static void Output_write(Output* output, Buffer** buffer, Error* error) { Pager* pager = (Pager*) output->arg; if (pager->fd == IO_INVALID_FD) { if (buffer_input(pager, buffer, error)) { return; } Array argv; init_argv(&argv, pager->options, error); if (ERROR_HAS(error)) { return; } int read_write_fds[2]; if (pipe(read_write_fds) == -1) { Error_add(error, strerror(errno)); Array_deinit(&argv); return; } // FIXME: reuse fork_exec_fd? int child_pid = fork(); if (child_pid == -1) { Error_add(error, strerror(errno)); Array_deinit(&argv); return; } else if (child_pid) { // FIXME: cleanup fork if (dup2(read_write_fds[0], STDIN_FILENO) == -1) { Error_add(error, strerror(errno)); Array_deinit(&argv); return; } close(read_write_fds[0]); close(read_write_fds[1]); execvp((char*) argv.data[0], (char**) argv.data); // FIXME: cleanup fork Error_add(error, strerror(errno)); Array_deinit(&argv); return; } Array_deinit(&argv); close(read_write_fds[0]); flush_buffer(pager, read_write_fds[1], error); // FIXME: cleanup fork if (ERROR_HAS(error)) { return; } } io_write(pager->fd, *buffer, error); (*buffer)->length = 0; }