Advertisement
se7enuts

3333

May 31st, 2016
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.82 KB | None | 0 0
  1. /* Vytautas Deinis IF-4/6 Ld3 */
  2. /* Failas: loginas_ld3.c */
  3. /*
  4. failo vardo, offseto ir baitų skaičiaus.
  5. tada kopijavo į kitą failą (jei išeina, pvz jei baitų daugiau nei
  6. faile yra tada nekopijuoja) ir kopijuot reikėjo primapinus į atmintį.
  7. tada reikėjo dar atspausdinti nukopijuotus pirmą ir paskutinį baitus
  8. */
  9. #include <stdio.h>
  10. #include <stdlib.h>
  11. #include <sys/types.h>
  12. #include <sys/stat.h>
  13. #include <fcntl.h>
  14. #include <unistd.h>
  15.  
  16. int main(int argc, char * Argv[])
  17. {
  18. printf( "(C) 2016 Vytautas Deinis, %s\n", __FILE__ );
  19. if( argc != 4)
  20. {
  21. perror("reikia triju argumentu: failo vardo, praleistu nuo pradzios baitu skaiciaus, skaitomu baitu kiekio");
  22. return 1;
  23. }
  24. int failo_vardas = open(Argv[1], O_RDONLY);
  25.  
  26. if( failo_vardas == -1 )
  27. {
  28. perror("nepavyko atidaryti failo");
  29. return 1;
  30. }
  31. int N = atoi(Argv[2]);
  32. int M = atoi(Argv[3]);
  33. void *P = NULL;
  34. struct stat sb;
  35. stat(Argv[1], &sb);
  36. int failo_dydis = sb.st_size;
  37. if( failo_dydis < (M + N) )
  38. {
  39. perror("nepakanka duomenu skaitymo faile");
  40. return 1;
  41. }
  42.  
  43. int ret = lseek(failo_vardas, N, SEEK_SET);
  44. if( ret < 0 )
  45. {
  46. perror("skaitymas nepavyko del offset");
  47. return 1;
  48. }
  49.  
  50. unsigned char buffer[M];
  51. ret = read(failo_vardas, &buffer, M);
  52. if( ret < 0 )
  53. {
  54. perror("skaitymas nepavyko");
  55. return 1;
  56. }
  57.  
  58. int databin = open("data.bin", O_WRONLY | O_TRUNC | O_CREAT, 0644);
  59. if( databin < 0)
  60. {
  61. perror("nepavyko atidaryti rezultatu failo");
  62. return 1;
  63. }
  64.  
  65. ret = write(databin, &buffer, M);
  66. if( ret < 0)
  67. {
  68. perror("nepavyko perrasyti duomenu");
  69. return 1;
  70. }
  71.  
  72. int pirmas, paskutinis = -1;
  73. pirmas = (int)buffer[0];
  74. paskutinis = (int)buffer[M-1];
  75. printf("pirmas nukopijuotas baitas - %d, paskutinis - %d\n", pirmas, paskutinis);
  76.  
  77. close(databin);
  78. close(failo_vardas);
  79. return 0;
  80. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement