main.f90 968 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. use iso_fortran_env, only: stderr=>error_unit
  2. use iso_c_binding, only: c_int, c_char, c_null_char, c_ptr
  3. use gzip, only: gzopen, gzwrite, gzclose
  4. implicit none
  5. character(kind=c_char,len=*), parameter :: path = c_char_"test.gz"//c_null_char
  6. character(kind=c_char,len=*), parameter :: mode = c_char_"wb9"//c_null_char
  7. integer(c_int), parameter :: buffer_size = 512
  8. type(c_ptr) :: file
  9. character(kind=c_char, len=buffer_size) :: buffer
  10. integer(c_int) :: ret
  11. integer :: i
  12. ! open file
  13. file = gzopen(path, mode)
  14. ! fill buffer with data
  15. do i=1,buffer_size/4
  16. write(buffer(4*(i-1)+1:4*i), '(i3.3, a)') i, new_line('')
  17. end do
  18. ret = gzwrite(file, buffer, buffer_size)
  19. if (ret /= buffer_size) then
  20. write(stderr,'(a, i3, a, i3, a)') 'Error: ', ret, ' / ', buffer_size, &
  21. ' bytes written.'
  22. stop 1
  23. end if
  24. ! close file
  25. ret = gzclose(file)
  26. if (ret /= 0) then
  27. write(stderr,*) 'Error: failure to close file with error code ', ret
  28. stop 1
  29. end if
  30. end program