I think fuse setting has to be done in programming mode, which needs to be done via the ICSP interface, or a dedicated programmer. You can read fuses in an ordinary program. Example:
#include <avr/boot.h>
#define SIGRD 5
void setup ()
{
Serial.begin (115200);
Serial.println ();
Serial.println ("Signature");
byte sig;
sig = boot_signature_byte_get (0);
Serial.println (sig, HEX);
sig = boot_signature_byte_get (2);
Serial.println (sig, HEX);
sig = boot_signature_byte_get (4);
Serial.println (sig, HEX);
Serial.println ("Fuses");
byte fuse;
fuse = boot_lock_fuse_bits_get (GET_LOW_FUSE_BITS);
Serial.println (fuse, HEX);
fuse = boot_lock_fuse_bits_get (GET_HIGH_FUSE_BITS);
Serial.println (fuse, HEX);
fuse = boot_lock_fuse_bits_get (GET_EXTENDED_FUSE_BITS);
Serial.println (fuse, HEX);
fuse = boot_lock_fuse_bits_get (GET_LOCK_BITS);
Serial.println (fuse, HEX);
}
void loop () {}
You can get a $10 programmer board like the USBtinyISP or similar. You don't need another Arduino as such.
Certainly I'm getting programme corruption.
Could be a program bug.