#include <gmp.h> #include <stdio.h> #include <stdlib.h> #include <errno.h> int main(int argc, char** argv) { mpz_t b; mpz_init(b);
//not sure why but without doing something before //the file IO the file write will segfault int len = 5; mpz_t l[5]; for(int i = 0; i < len; ++i) { mpz_init(l[i]); } for(int i = 0; i < len; ++i) { mpz_set_ui(l[i], 1); } for(int i = 0; i < len; ++i) { mpz_clear(l[i]); } FILE *file = fopen("numbers.dat", "wb"); if(file == NULL) { perror("Could not open numbers.dat for writing"); printf ("Error no is : %d\n", errno); exit(EXIT_FAILURE); } for(int i = 1; i < 4; ++i) { printf("writing "); mpz_set_ui(b, i); //mpz_pow_ui(b, b, 1<<5); mpz_out_str(stdout, 16, b); printf(" to file\n"); mpz_out_raw(b, file); } fclose(file); printf("write finished\n"); file = fopen("numbers.dat", "rb"); for(int i = 1; i < 4; ++i) { printf("reading "); mpz_inp_raw(b, file); mpz_out_str(stdout, 16, b); printf(" from file\n"); } fclose(file); mpz_clear(b); return 0; } I compile this with gcc test.c -lgmp Across a few test programs I've observed the following behaviours after calling mpz_out_raw: - nothing is written to the file - mpz_out_raw hangs and never returns (the sample program above does this) - 1-2 bytes are written to the file and the second call to mpz_out_raw hangs My GMPlib version: [tlowry@archpad scripts]$ pacman -Qi gmp Name : gmp Version : 6.1.2-2 Description : A free library for arbitrary precision arithmetic Architecture : x86_64 URL : http://gmplib.org/ Licenses : LGPL3 GPL Groups : None Provides : None Depends On : gcc-libs sh Optional Deps : None Required By : coreutils dnsmasq ffmpeg guile guile2.0 mpfr nettle python- pycryptodome Optional For : None Conflicts With : None Replaces : None Installed Size : 969.00 KiB Packager : Allan McRae <al...@archlinux.org> Build Date : Wed 07 Nov 2018 12:52:28 AM ACDT Install Date : Sun 11 Nov 2018 11:08:04 AM ACDT Install Reason : Installed as a dependency for another package Install Script : No Validated By : Signature Other system information: [tlowry@archpad scripts]$ uname -a Linux archpad 5.2.1-arch1-1-ARCH #1 SMP PREEMPT Sun Jul 14 14:52:52 UTC 2019 x86_64 GNU/Linux [tlowry@archpad scripts]$ gcc -v Using built-in specs. COLLECT_GCC=gcc COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-pc-linux-gnu/9.1.0/lto-wrapper Target: x86_64-pc-linux-gnu Configured with: /build/gcc/src/gcc/configure --prefix=/usr -- libdir=/usr/lib --libexecdir=/usr/lib --mandir=/usr/share/man -- infodir=/usr/share/info --with-bugurl=https://bugs.archlinux.org/ -- enable-languages=c,c++,ada,fortran,go,lto,objc,obj-c++ --enable-shared --enable-threads=posix --with-system-zlib --with-isl --enable- __cxa_atexit --disable-libunwind-exceptions --enable-clocale=gnu -- disable-libstdcxx-pch --disable-libssp --enable-gnu-unique-object -- enable-linker-build-id --enable-lto --enable-plugin --enable-install- libiberty --with-linker-hash-style=gnu --enable-gnu-indirect-function --enable-multilib --disable-werror --enable-checking=release --enable- default-pie --enable-default-ssp --enable-cet=auto Thread model: posix gcc version 9.1.0 (GCC) _______________________________________________ gmp-bugs mailing list gmp-bugs@gmplib.org https://gmplib.org/mailman/listinfo/gmp-bugs