From owner-freebsd-questions@FreeBSD.ORG Fri Dec 18 08:28:04 2009 Return-Path: Delivered-To: freebsd-questions@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 554CB1065670 for ; Fri, 18 Dec 2009 08:28:04 +0000 (UTC) (envelope-from m.seaman@infracaninophile.co.uk) Received: from smtp.infracaninophile.co.uk (gate6.infracaninophile.co.uk [IPv6:2001:8b0:151:1::1]) by mx1.freebsd.org (Postfix) with ESMTP id B74188FC2C for ; Fri, 18 Dec 2009 08:28:03 +0000 (UTC) Received: from happy-idiot-talk.infracaninophile.co.uk (localhost [IPv6:::1]) (authenticated bits=0) by smtp.infracaninophile.co.uk (8.14.3/8.14.3) with ESMTP id nBI8RpoB083533; Fri, 18 Dec 2009 08:27:52 GMT (envelope-from m.seaman@infracaninophile.co.uk) X-DKIM: Sendmail DKIM Filter v2.8.3 smtp.infracaninophile.co.uk nBI8RpoB083533 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=infracaninophile.co.uk; s=200708; t=1261124872; bh=sOCAKX+EjGY2+re8T36YDaAnYoETq686akn2tTHNkZI=; h=Message-ID:Date:From:MIME-Version:To:CC:Subject:References: In-Reply-To:Content-Type:Cc:Content-Type:Date:From:In-Reply-To: Message-ID:Mime-Version:References:To; z=Message-ID:=20<4B2B3D01.4050304@infracaninophile.co.uk>|Date:=20F ri,=2018=20Dec=202009=2008:27:45=20+0000|From:=20Matthew=20Seaman= 20|Organization:=20Infracaninophi le|User-Agent:=20Thunderbird=202.0.0.23=20(X11/20091129)|MIME-Vers ion:=201.0|To:=20Anton=20Shterenlikht=20|CC:= 20Rolf=20Nielsen=20,=20=0D=0A=20free bsd-questions@freebsd.org|Subject:=20Re:=20editing=20a=20binary=20 file|References:=20<20091218005102.GA51064@mech-cluster241.men.bri s.ac.uk>=09<4B2AD666.9090404@lazlarlyricon.com>=20<20091218012918. GA71118@mech-cluster241.men.bris.ac.uk>|In-Reply-To:=20<2009121801 2918.GA71118@mech-cluster241.men.bris.ac.uk>|X-Enigmail-Version:=2 00.95.6|Content-Type:=20multipart/signed=3B=20micalg=3Dpgp-sha256= 3B=0D=0A=20protocol=3D"application/pgp-signature"=3B=0D=0A=20bound ary=3D"------------enigBD213151F79D075CCBE7A555"; b=JM0OiCwUsFE1lOP9Fx2j0RsGbNjGVYYCcgWRuxdvwQSgWMPpcLuGLoZu+s1KeI974 O68bMH3TiCnd+97v3nQjIZkxzf8ktnKvwGxP6sEWnHDezhHKdne5Ikk4JdJox2e83A IEVQ95DzIfIym63Z2GxTYY12kdngtqoeVKkhpdu0= X-Authentication-Warning: happy-idiot-talk.infracaninophile.co.uk: Host localhost [IPv6:::1] claimed to be happy-idiot-talk.infracaninophile.co.uk Message-ID: <4B2B3D01.4050304@infracaninophile.co.uk> Date: Fri, 18 Dec 2009 08:27:45 +0000 From: Matthew Seaman Organization: Infracaninophile User-Agent: Thunderbird 2.0.0.23 (X11/20091129) MIME-Version: 1.0 To: Anton Shterenlikht References: <20091218005102.GA51064@mech-cluster241.men.bris.ac.uk> <4B2AD666.9090404@lazlarlyricon.com> <20091218012918.GA71118@mech-cluster241.men.bris.ac.uk> In-Reply-To: <20091218012918.GA71118@mech-cluster241.men.bris.ac.uk> X-Enigmail-Version: 0.95.6 Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="------------enigBD213151F79D075CCBE7A555" X-Virus-Scanned: clamav-milter 0.95.3 at happy-idiot-talk.infracaninophile.co.uk X-Virus-Status: Clean X-Spam-Status: No, score=-2.8 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED, DKIM_VERIFIED,NO_RELAYS autolearn=ham version=3.2.5 X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on happy-idiot-talk.infracaninophile.co.uk Cc: freebsd-questions@freebsd.org Subject: Re: editing a binary file X-BeenThere: freebsd-questions@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: User questions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 18 Dec 2009 08:28:04 -0000 This is an OpenPGP/MIME signed message (RFC 2440 and 3156) --------------enigBD213151F79D075CCBE7A555 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: quoted-printable Anton Shterenlikht wrote: > On Fri, Dec 18, 2009 at 02:09:58AM +0100, Rolf Nielsen wrote: >> Anton Shterenlikht wrote: >>> I'm creating binary files in fortran. >>> Fortran adds 4 byte record delimiters at the beginning >>> and the end of each record, which, in the case of a binary >>> file, is just at the beginning and at the end of the file. >>> I need to delete these record delimiters, because the >>> software I use to visualise the binary files interprets >>> them as data. But I don't know how. I've looked at >>> hexdump and od, but those are only dumping (I think) >>> file contents, and I cannot see how to edit a file with them. >>> >>> Any advice? >>> >>> many thanks >>> anton >>> >> Hello Anton, >> >> My bet would be /usr/ports/editors/hexedit. Been a while since I've us= ed=20 >> it, but AFAIR, it has a curses or a curses like interface, and it's=20 >> fairly simple to use, yet sufficiently powerful for most normal binary= =20 >> editing. If you want a GUI, I believe gnome (and probably KDE as well)= =20 >> has its own hex editor. >=20 > thank you. hexedit does the job on small files, but is quite > clunky. If I've a xGB file and I need to delete the first and > the last record, this becomes quite hard, if at all possible. >=20 > I didn't appreciate it's not that simple. >=20 > Perhaps I can read a file with C and write back? I can't > remember if C supports binary files, and whether it > also writes some record delimiters. Sure, you can write a fairly short C program to do this. In fact, it's pretty easy in perl too: #!/usr/bin/perl -w use Fcntl; use constant BUFFSIZ =3D> 4096; for my $file (@ARGV) { my $buffer =3D ''; my $bytes_read =3D 0; sysopen INFILE, $file, O_RDONLY or die "Failed to open file $file for reading -- $!\n"; sysseek INFILE, 4, 0; # skip first 4 bytes sysopen OUTFILE, "${file}.out", O_WRONLY|O_CREAT or die "Failed to open file ${file}.out for writing -- $!\n"; while ( $bytesread =3D sysread INFILE, $buffer, BUFFSIZ, 0 ) { # If we don't read 4096 bytes, try a second read: if this # returns zero, then we're at EOF if ( $bytes_read < BUFFSIZ ) { my $offset =3D $bytes_read; $bytes_read =3D sysread INFILE, $buffer, BUFFSIZ, $offset; if ( $bytes_read =3D=3D 0 ) { # Trim the last 4 bytes substr ($buffer, -4) =3D ''; # Trim off last 4 bytes } } syswrite OUTFILE, $buffer; } close INFILE; close OUTFILE; } Untested, and needs more error checking around those sysread()s and syswr= ite()s, but it should give you the general idea. Cheers, Matthew --=20 Dr Matthew J Seaman MA, D.Phil. 7 Priory Courtyard Flat 3 PGP: http://www.infracaninophile.co.uk/pgpkey Ramsgate Kent, CT11 9PW --------------enigBD213151F79D075CCBE7A555 Content-Type: application/pgp-signature; name="signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="signature.asc" -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.13 (FreeBSD) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iEYEAREIAAYFAksrPQcACgkQ8Mjk52CukIwGkgCfZKYcJViO1YcUErL36GE8uEYP vA0An0EpJ1qG0DrATmyX4os9Wbngsc8h =bBz/ -----END PGP SIGNATURE----- --------------enigBD213151F79D075CCBE7A555--