Разве я не должен получать сообщение об ошибке ОС, например
Это зависит.
Предположим, ваша команда перестройки - gcc -o foo t.c
.
Это команда может либо open(2)
foo
для записи, либо она может записывать во временный файл foo.$uniqsuffix
и rename(2)
временный файл foo
в случае успеха, или может unlink(2)
foo
и создавать и записывать в новый foo
.
Только первый вариант - попытка записи в оригинал foo
завершится неудачно с ETXTBSY
.
Выполняется strace -fe file gcc -o foo t.c |& grep foo
в моей системе (Ubuntu) отображается:
[pid 116892] stat("foo", {st_mode=S_IFREG|0750, st_size=16520, ...}) = 0
[pid 116892] lstat("foo", {st_mode=S_IFREG|0750, st_size=16520, ...}) = 0
[pid 116892] unlink("foo") = 0
[pid 116892] openat(AT_FDCWD, "foo", O_RDWR|O_CREAT|O_TRUNC, 0666) = 3
[pid 116892] stat("foo", {st_mode=S_IFREG|0640, st_size=16520, ...}) = 0
[pid 116892] chmod("foo", 0750) = 0
Итак, в этой системе компоновщик использует стратегию unlink
+ создания нового файла, и ошибок не ожидается.
См. this ответьте на , почему вы можете продолжить отладку исходной программы даже после того, как она была перестроена.