2016-04-01 6 views
1
#include <sys/types.h> 
#include <sys/ipc.h> 
#include <sys/shm.h> 

key_t key = IPC_PRIVATE; 
int id; 
int semflg = 384; 

id = shmget(key, 8192, semflg); 

Kann mir jemand sagen, welche Auswirkungen der Wert von 384 in semflg hat?Semaphor shmget() Was macht semflg = 384?

Antwort

1

Die Manpage von shmget sagt:

Zusätzlich zu den oben Fahnen, die am wenigsten signifikanten 9 Bits von shmflg die Berechtigungen an den Besitzer gewährt angeben, Gruppen- und andere. Diese Bits haben das gleiche Format und die gleiche Bedeutung wie das Modusargument von open (2).

wir also den -Manpage von offenen prüfen:

The following symbolic constants are provided for mode: 
- S_IRWXU 00700 user (file owner) has read, write, and execute permission 
- S_IRUSR 00400 user has read permission 
- S_IWUSR 00200 user has write permission 
- S_IXUSR 00100 user has execute permission 
- S_IRWXG 00070 group has read, write, and execute permission 
- S_IRGRP 00040 group has read permission 
- S_IWGRP 00020 group has write permission 
- S_IXGRP 00010 group has execute permission 
- S_IRWXO 00007 others have read, write, and execute permission 
- S_IROTH 00004 others have read permission 
- S_IWOTH 00002 others have write permission 
- S_IXOTH 00001 others have execute permission 

Der ganzzahlige Wert als binär kodiert ist, die den Flags entspricht, das heißt S_IRUSR|S_IWUSR :

  • benutzer h als Schreibberechtigung
  • Benutzerberechtigung

Wer schrieb gelesen hat, dass der Code Stück 2 Minuten seines Lebens verschont und viel mehr Zeit für das Leben vieler anderer verschwendet, mich eingeschlossen.

Herzlichen Glückwunsch. :)


edit: dank @Fabio Turati für einen großen Fehler Hinweis auf;)

+1

Sind Sie sicher, dass 101.111.110 auf die Fahnen 374 entspricht? Ich würde sagen, es ist 576. Das heißt: Benutzer hat gelesen und ausgeführt, Gruppe hat gelesen, geschrieben und ausgeführt, und andere haben gelesen und geschrieben. Und schon vorher: Sind Sie sicher, dass 384 in binärer Form codiert ist? Sollte es nicht 110000000 sein? Das heißt, Benutzer hat gelesen und geschrieben, und alle anderen haben nichts? Ihre Nummer, 101111110, ist tatsächlich die Binärcodierung von 382, ​​nicht 384. Können Sie das bitte überprüfen? –

+0

@FabioTurati Ich habe die Anfangszahl in Python vertippt, und von dort ging alles bergab. Danke für den Hinweis auf den Fehler :) –

+0

Gern geschehen. Gute Antwort übrigens! –