Am Rande: ImageMagick hat auch
eine C-API – falls du mal zu viel Freizeit hast und die
system() ersetzen willst
Ansonsten: Ich nehme mal an,
ENABLE_ALL_COM ist definiert? Falls nicht, dürfte der
jhead-Aufruf das ursprünglich vermutete Problem auslösen, der überschreibt, was display versucht parallel zu lesen:
Code: Alles auswählen
if ( strlen( rembuf ) ){ /* Kommentar einfuegen lassen */
sprintf( workbuf, "jhead -cl \"%s\" \"%s\" > /dev/null", rembuf, img->name );
system( workbuf );
}
Andernfalls wäre meine nächste Vermutung, dass
display versucht, die Datei zu lesen, wenn sie hier
im
*_put_com() gerade gelöscht ist. In irgendeiner Form muss das ja basierend auf der ursprünglichen Fehlermeldung
dakuan hat geschrieben: 25.05.2021 16:25:45
Code: Alles auswählen
display-im6.q16: unable to open image `Traktor1.jpg': Datei oder Verzeichnis nicht gefunden @ rror/blob.c/OpenBlob/2701.
display-im6.q16: no decode delegate for this image format `' @ error/constitute.c/ReadImage/504.
der Fall sein.
Ich hab mal ein strace auf einen display-Aufruf laufen lassen. display öffnet (hier zumindest) die Datei insgesamt dreimal – und schließt sie auch zwischendurch wieder:
Code: Alles auswählen
$ strace -o strace.txt -e open,openat,stat,access,close display test.jpg
stat("test.jpg", {st_mode=S_IFREG|0600, st_size=20052, ...}) = 0
access("test.jpg", F_OK) = 0
[…]
stat("test.jpg", {st_mode=S_IFREG|0600, st_size=20052, ...}) = 0
openat(AT_FDCWD, "test.jpg", O_RDONLY) = 4
close(4) = 0
[…]
stat("test.jpg", {st_mode=S_IFREG|0600, st_size=20052, ...}) = 0
openat(AT_FDCWD, "test.jpg", O_RDONLY) = 4
close(4) = 0
stat("test.jpg", {st_mode=S_IFREG|0600, st_size=20052, ...}) = 0
openat(AT_FDCWD, "test.jpg", O_RDONLY) = 4
close(4)
[…]
Neben einigen
stat() und
access()-Aufrufen. Das mehrfache Öffnen ist, vermute ich mal, zum anfänglichen Ermitteln des Dateityps (niemand verlässt sich auf Dateiendungen) und schließlich tatsächlichen Auslesen der Inhalte. Wenn die Datei bei einem der drei Öffnungsversuche gerade gelöscht ist, würde das zu obigem typischen
passen.