#define _POSIX_C_SOURCE 2 #include #include #include static void die(const char *message) { fputs(message, stderr); fputc('\n', stderr); exit(1); } static void die_err(const char *message) { perror(message); exit(1); } static void write_to_tl_append(const char *content) { FILE *p = popen("./tl-append", "w"); if (p == NULL) die_err("Couldn't run tl-append"); if (fputs(content, p) == EOF) die("Couldn't write to pipe"); int status = pclose(p); if (status < 0) die_err("Error closing pipe"); if (status != 0) die("tl-append exited abnormally"); } static void verify_log_contents(const char *contents) { char buf[10]; FILE *f = fopen("tl.log", "r"); if (f == NULL) die_err("Error opening log file"); if (fgets(buf, sizeof(buf), f) == NULL) die("Error reading log file"); if (strncmp(contents, buf, sizeof(buf)) != 0) die("Wrong contents in log file"); if (fclose(f) != 0) die_err("Error closing log file"); } static void write_and_read_line() { write_to_tl_append("foo\n"); verify_log_contents("foo\n"); } int main() { write_and_read_line(); }