Guest User

Untitled

a guest
Apr 24th, 2018
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.93 KB | None | 0 0
  1. Interleave two or more files
  2.  
  3. Build:
  4. g++ -mno-cygwin -o interleave interleave.cpp
  5.  
  6. FILE *fo = fopen(argv[1], "wb");
  7. if (!fo) { fprintf(stderr, "Error opening output file!n"); return 1; }
  8.  
  9. int bufsize = strtoul(argv[2],0,0);
  10. unsigned char *buffer = new unsigned char[bufsize];
  11.  
  12. FILE *fi[32];
  13. int files = 0;
  14. for (int a=3; argv[a]; a++)
  15. {
  16. fi[files] = fopen(argv[a], "rb");
  17. if (!fi[files]) { fprintf(stderr, "Error opening input file!n"); return 1; }
  18. files++;
  19. }
  20.  
  21. int files_active = files;
  22. for (int f=0; files_active; f++)
  23. {
  24. if (f == files) f = 0;
  25. int read = 0;
  26. if (fi[f])
  27. {
  28. read = fread(buffer, 1, bufsize, fi[f]);
  29. if (read <= 0) { fclose(fi[f]); fi[f] = 0; files_active--; continue; }
  30. fwrite(buffer, 1, read, fo);
  31. }
  32. //if (bufsize > read)
  33. {
  34. memset(buffer, 0, bufsize - read);
  35. fwrite(buffer, 1, bufsize - read, fo);
  36. }
  37. }
  38.  
  39. fclose(fo);
  40.  
  41. delete [] buffer;
  42.  
  43. return 0;
Add Comment
Please, Sign In to add comment