Ich nenne einen Systemaufruf wie write()
in C, auf der anderen Seite ich write()
mit dlsym()
auf diese Weise aufrufen:Systemaufruf oder dlsym? Welcher Weg ist schneller?
ssize_t original_write(int fd, const void *buf, size_t count)
{
typedef ssize_t (*orig_write_type)(int, const void *, size_t);
static orig_write_type orig_write;
if (!orig_write)
orig_write = (orig_write_type) dlsym(RTLD_NEXT, "write");
ssize_t ret = orig_write(fd, buf, count);
return ret;
}
Ich bin neugierig, welche Art und Weise schneller ist? Wenn ich write()
rufe, ruft es auch dlsym()
implizit auf, um seine Adresse zu erhalten? Bitte korrigieren Sie mich. Vielen Dank für Ihre Zeit.
Der Compiler wird wahrscheinlich beide in den gleichen Code umwandeln. – Leandros
Was ist schneller? Sie können das selbst messen ... –
C sagt nichts über 'dlsym()' - es gehört nicht zu den von C definierten Standardbibliotheksfunktionen. Außerdem wäre ich sehr überrascht, irgendeine Implementierung mit 'dlsym()' zu finden Implementieren von Funktionsaufrufen in dynamische Bibliotheken. Systeme mit dynamischen Bibliotheken haben normalerweise irgendeine Form von dynamischem Linker, die es unnötig macht. Aber insgesamt, * warum in der Welt würden Sie so ein hässliches Durcheinander zu Ihrem Programm * hinzufügen wollen? –