Ist es jemals möglich, dass ein Lesevorgang auf einen Speicherort unbegrenzt verlängert wird (und ein anderer Thread den Lesevorgang nach einer beliebigen Zeitüberschreitung abschließen kann)?Kann jemals unbegrenzt auf den zugeordneten Speicher zugegriffen werden?
Zum Beispiel mit Steckdosen blockiert, können wir einen Prozess zu stoppen, erhalten bei Verwendung des read
Systemaufruf:
fd = socket(AF_UNIX, SOCK_DGRAM, 0);
read(fd, buffer, 256);
Normalerweise können wir nicht mmap
Steckdosen, aber ich möchte im Wesentlichen das Gleiche passieren wenn Zugriff auf den Speicher direkt:
int x = *(int *)map;
ich bin von Techniken bewusst Speicherzugriff länger zu machen, wie madvise
zu Seite, bevor er Zugriff auf den Speicher, aber ich bin auf der Suche nach einer Methode, dies zu bekommen dauern auf unbestimmte Zeit.
Ich habe überlegt, mmap
für eine Datei zu verwenden, und dann diese Datei "sperren", konnte aber keine geeignete Schnittstelle dafür finden. Der Systemaufruf flock
scheint nicht so zu funktionieren.
Speziell interessiert mich FreeBSD für x86-64-Architektur, aber Antworten für andere Unix-ähnliche Systeme wie Linux und andere Architekturen würden ebenfalls geschätzt werden.
Wenn Sie den Speicherzugriff "blockieren" möchten, können Sie versuchen, eine Datei auf einem NFS-Mount zu lesen und einen echten wahlfreien Zugriff auf diesen Speicher auszuführen. – wildplasser
Wenn sich die Datei auf einem benutzerdefinierten ['FUSE'-Mount] (https://en.wikipedia.org/wiki/Filesystem_in_Userspace) befindet, können Sie jedes beliebige Verhalten erhalten. –