TYPE buffer[count]; fwrite( buffer, sizeof(TYPE), count, stream ); //================= fread( buffer, sizeof(TYPE), count, stream ); // TYPE does not matter buffer[3]; // now data is read according to TYPE encoding // this works on 1 element TYPE value; // array[1] TYPE array[1]; fwrite( &value, sizeof(TYPE), 1, stream ); splitter -------- +--------------------------+ | input file | 256 Gb HARDDRIVE | | +--------------------------+ // +------------+ // | chunk1 | BUFFER = CHUNK to much space // | | // +------------+ +--+ | | 4K buffer +--+ buffer in memory +------------++------------+ | chunk1 || chunk2 | HARDDRIVE | || | +------------++------------+ copy on 2*128Gb flash-drives +--------------------------+ |11223344556|677.. | 256 Gb HARDDRIVE +--------------------------+ | V +--+ |67| 4K buffer +--+ | V +-----------+ + |11223344556| |67..... +-----------+ + DO NOT USE: ftell/fseek arbitrary sized buffer <=4K remove 1122 - input split into 2-byte file |11| |22| || empty file