#include "csapp.h" /* Read in all data from stdin and write it out in a reverse order --- using only system APIs, so no malloc() for fread() or fwrite() */ void* our_malloc(size_t size) { return Mmap(NULL,size, PROT_READ|PROT_WRITE,MAP_PRIVATE+MAP_ANON, -1,0); } int main() { size_t sz =1<<14; char* buffer=our_malloc(sz); size_t b_read; int offset = 0; while((b_read = Read(0,buffer+offset,sz-offset)) !=0) { offset += b_read; if(offset == sz) { char* old_buffer = buffer; size_t old_sz = sz; sz=sz*2; buffer=our_malloc(sz); memcpy(buffer,old_buffer,old_sz); Munmap(old_buffer, old_sz); } } { char *out; size_t done = 0, i; out = mmap(NULL,sz,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANON,-1,0); for (i = 0; i < sz; i++) out[sz-1-i] = buffer[i]; while(done < sz) { done += Write(1, out+done, sz-done); } } return 0; }