5 Einträge, 1 Seite |
1
2
3
4
5
if(open(FILE, "+> diedatei.bin")) {
binmode FILE;
syswrite FILE, 0x08, 1, 0xFF;
close FILE;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#!/usr/bin/perl
use strict;
use warnings;
use Fcntl qw/:seek/;
my $dateiname = 'dateizupatchen';
my $offset = 0xff;
my $bytes_zu_schreiben = 1;
my $alte_bytes = "\x00";
my $neue_bytes = "\x08";
my $vorhandene_bytes;
# Datei oeffnen
open my $dateihandle, '+<', $dateiname
or die "Kann $dateiname nicht oeffnen: $!\n";
# Daten binaer lesen und schreiben!
binmode $dateihandle;
# Position aufsuchen
seek $dateihandle, $offset, SEEK_SET
or die "Kann nicht in Datei $dateiname auf Position $offset setzen: $!\n";
# Alten Inhalt einlesen
my $bytes_gelesen = sysread $dateihandle, $vorhandene_bytes, $bytes_zu_schreiben;
# Fehler aufgetreten?
if (!defined $bytes_gelesen) {
die "Kann nicht aus Datei $dateiname lesen: $!\n";
} elsif ($bytes_gelesen != $bytes_zu_schreiben) {
die "Kann nur $bytes_gelesen Bytes aus $dateiname lesen.\n";
}
# Alten Inhalt vergleichen
if ($vorhandene_bytes ne $alte_bytes) {
die "Voriger Inhalt der Datei stimmt nicht, breche ab!\n";
}
# Alte Position wieder aufsuchen
seek $dateihandle, $offset, SEEK_SET
or die "Kann nicht in Datei $dateiname nochmals auf Position $offset setzen: $!\n";
# Daten ueberschreiben
my $byteswritten = syswrite $dateihandle, $neue_bytes, $bytes_zu_schreiben;
# Fehler aufgetreten?
if (!defined $byteswritten) {
die "Kann nicht nach $dateiname schreiben: $!\n";
} elsif ($byteswritten != $bytes_zu_schreiben) {
die "Kann nur $byteswritten Bytes nach $dateiname schreiben.\n";
}
# Alles okay, Bestaetigung ausgeben
print STDERR "$bytes_zu_schreiben Bytes in $dateiname an Position $offset geaendert.\n"
5 Einträge, 1 Seite |