#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> /* * Write a string to the /proc/escape file * This will be executed and the output sent to /proc/output */ int send_command(char *command) { FILE *escape = fopen("/proc/escape", "w+"); int fd = fileno(escape); /* Flush the cache for good measure */ fprintf(escape, "%s\n", command); fsync(fd); fclose(escape); return 0; } /* * Open and print whatever is in /proc/output */ int print_output(void) { FILE *output = fopen("/proc/output", "r");; char c; while( (c = fgetc(output)) != EOF ) printf("%c",c); fclose(output); return 0; } /* * Check escape.ko has been loaded, wait for input and loop * sending commands to /proc/escape and printing output from * /proc/output */ int main(void) { char *command; command = malloc(255); if( access("/proc/escape", F_OK) == -1 ) { printf("Please run ./escape first\n"); goto done; } /* * Main loop */ while( 1 ) { printf("# "); scanf(" %[^\n]", command); /* * Check for "exit" command */ if ( strcmp(command, "exit") == 0 ) goto done; /* * Send to helper functions * We wait in between to allow IO to flush */ send_command(command); sleep(1); print_output(); } done: /* * Cleanup and exit */ free(command); return 0; }