+ } else if(S_ISREG(stat_buf.st_mode)) {
+ printf("Opening file.\n");
+
+ fd_pairs->pair = realloc(fd_pairs->pair,
+ ++fd_pairs->num_pairs * sizeof(struct fd_pair));
+
+ /* Open the channel in read mode */
+ fd_pairs->pair[fd_pairs->num_pairs-1].channel =
+ open(path_channel, O_RDONLY | O_NONBLOCK);
+ if(fd_pairs->pair[fd_pairs->num_pairs-1].channel == -1) {
+ perror(path_channel);
+ }
+ /* Open the trace in write mode, only append if append_mode */
+ ret = stat(path_trace, &stat_buf);
+ if(ret == 0) {
+ if(append_mode) {
+ printf("Appending to file %s as resquested\n", path_trace);
+
+ fd_pairs->pair[fd_pairs->num_pairs-1].trace =
+ open(path_trace, O_WRONLY|O_APPEND,
+ S_IRWXU|S_IRWXG|S_IRWXO);
+
+ if(fd_pairs->pair[fd_pairs->num_pairs-1].trace == -1) {
+ perror(path_trace);
+ }
+ } else {
+ printf("File %s exists, cannot open. Try append mode.\n", path_trace);
+ return -1;
+ }
+ } else {
+ if(errno == ENOENT) {
+ fd_pairs->pair[fd_pairs->num_pairs-1].trace =
+ open(path_trace, O_WRONLY|O_CREAT|O_EXCL,
+ S_IRWXU|S_IRWXG|S_IRWXO);
+ if(fd_pairs->pair[fd_pairs->num_pairs-1].trace == -1) {
+ perror(path_trace);
+ }
+ }
+ }