Torna indietro   Hardware Upgrade Forum > Software > Programmazione

GIGABYTE GAMING A16, Raptor Lake e RTX 5060 Laptop insieme per giocare al giusto prezzo
GIGABYTE GAMING A16, Raptor Lake e RTX 5060 Laptop insieme per giocare al giusto prezzo
Il Gigabyte Gaming A16 offre un buon equilibrio tra prestazioni e prezzo: con Core i7-13620H e RTX 5060 Laptop garantisce gaming fluido in Full HD/1440p e supporto DLSS 4. Display 165 Hz reattivo, buona autonomia e raffreddamento efficace; peccano però le USB e la qualità cromatica del pannello. Prezzo: circa 1200€.
iPhone 17 Pro: più di uno smartphone. È uno studio di produzione in formato tascabile
iPhone 17 Pro: più di uno smartphone. È uno studio di produzione in formato tascabile
C'è tanta sostanza nel nuovo smartphone della Mela dedicato ai creator digitali. Nuovo telaio in alluminio, sistema di raffreddamento vapor chamber e tre fotocamere da 48 megapixel: non è un semplice smartphone, ma uno studio di produzione digitale on-the-go
Intel Panther Lake: i processori per i notebook del 2026
Intel Panther Lake: i processori per i notebook del 2026
Panther Lake è il nome in codice della prossima generazione di processori Intel Core Ultra, che vedremo al debutto da inizio 2026 nei notebook e nei sistemi desktop più compatti. Nuovi core, nuove GPU e soprattutto una struttura a tile che vede per la prima volta l'utilizzo della tecnologia produttiva Intel 18A: tanta potenza in più, ma senza perdere in efficienza
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 03-06-2006, 10:22   #1
beppegrillo
Senior Member
 
L'Avatar di beppegrillo
 
Iscritto dal: Mar 2004
Messaggi: 1451
[Posix] Semafori

Qualcuno mi spiega perche per creare un semaforo utilizzando sem_open devo avere montato tmpfs su /dev/shm?
Eppure da ciò che leggo quà la cosa dovrebbe funzionare ugualmente senza, invece ottengo un "Function not defined"

Quote:
NPTL Named Semaphores - is new in NPTL. It will use the tmpfs mounted on
/dev/shm if available. It does not have to exist for semaphores to work. You
can verify this by running the NPTL test suite with and without the /dev/shm
mount. The tst-sem* tests all pass in both scenarios. I'm sure a competent
programmer type could write a simple test case in about 3 minutes to verify
as well. Glibc is literally full of this sort of fallback behaviour. (Mind
you, there are still plenty of other NPTL test failures for some folks, but
that is a different kettle of fish :-)
__________________
Ciao ~ZeRO sTrEsS~
beppegrillo è offline   Rispondi citando il messaggio o parte di esso
Old 05-06-2006, 10:25   #2
trallallero
Senior Member
 
L'Avatar di trallallero
 
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
Quote:
Originariamente inviato da beppegrillo
Qualcuno mi spiega perche per creare un semaforo utilizzando sem_open devo avere montato tmpfs su /dev/shm?
Eppure da ciò che leggo quà la cosa dovrebbe funzionare ugualmente senza, invece ottengo un "Function not defined"
su che "macchina" sei ?
l'errore quando te lo da ?
trallallero è offline   Rispondi citando il messaggio o parte di esso
Old 05-06-2006, 13:09   #3
beppegrillo
Senior Member
 
L'Avatar di beppegrillo
 
Iscritto dal: Mar 2004
Messaggi: 1451
Quote:
Originariamente inviato da trallallero
su che "macchina" sei ?
l'errore quando te lo da ?
Sono su una macchina linux(slackware), l'errore lo ottengo quando utilizzo la chiamata sem_open.
Se ho montato /dev/shm nessun problema, se invece non lo ho ottengo un "Function not defined"
__________________
Ciao ~ZeRO sTrEsS~
beppegrillo è offline   Rispondi citando il messaggio o parte di esso
Old 05-06-2006, 13:31   #4
trallallero
Senior Member
 
L'Avatar di trallallero
 
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
Quote:
Originariamente inviato da beppegrillo
Sono su una macchina linux(slackware), l'errore lo ottengo quando utilizzo la chiamata sem_open.
Se ho montato /dev/shm nessun problema, se invece non lo ho ottengo un "Function not defined"
linux ? non penso di poterti aiutare molto allora.

Io lavoro su Sun Solaris e col codice seguente :

Codice:
#include <stdio.h>
#include <semaphore.h>

void main( int argc, char **argv )
{
   sem_t *s = sem_open( "semaf", O_CREAT );

   printf( "s %p: <%p>\n", s );

   sem_close(s);
}
lo compilo lo avvio e apre e chiude il semaforo senza la shm montata.

Ho un client linux ma la sem_open neanche c'e'
ma e' un linux versione Flingstones
mi spiace...
trallallero è offline   Rispondi citando il messaggio o parte di esso
Old 05-06-2006, 13:58   #5
beppegrillo
Senior Member
 
L'Avatar di beppegrillo
 
Iscritto dal: Mar 2004
Messaggi: 1451
Grazie del tantatvo, stasera cerco di fare una prova su una knoppix e vediamo che dice.
__________________
Ciao ~ZeRO sTrEsS~
beppegrillo è offline   Rispondi citando il messaggio o parte di esso
Old 05-06-2006, 15:59   #6
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Puoi catturare la strace del programma eseguito con e senza la shm?
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 05-06-2006, 17:15   #7
beppegrillo
Senior Member
 
L'Avatar di beppegrillo
 
Iscritto dal: Mar 2004
Messaggi: 1451
Certo, questo è il codice

Codice:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <errno.h>
#include <semaphore.h>
#include <fcntl.h>
#include <sys/stat.h>

#define _POSIX_SOURCE 1
char *name = "ciao";
int value;

int main (int argc, char *argv[]) {

  sem_t *semaforo;

  if ((semaforo = sem_open(name,O_CREAT,S_IROTH,4)) == SEM_FAILED)
        perror("semaforo"), exit(-1);

  printf("valore %d",value);
    return EXIT_SUCCESS;
}
Strace con shm
Codice:
execve("./semaforo", ["./semaforo"], [/* 45 vars */]) = 0
uname({sys="Linux", node="WhiteStar", ...}) = 0
brk(0)                                  = 0x804a000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY)      = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=89992, ...}) = 0
mmap2(NULL, 89992, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7f44000
close(3)                                = 0
open("/lib/tls/librt.so.1", O_RDONLY)   = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0`\35\0\000"..., 512) = 512
fstat64(3, {st_mode=S_IFREG|0755, st_size=34763, ...}) = 0
mmap2(NULL, 29260, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb7f3c000
mmap2(0xb7f42000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x5) = 0xb7f42000
close(3)                                = 0
open("/lib/tls/libc.so.6", O_RDONLY)    = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\20O\1\000"..., 512) = 512
fstat64(3, {st_mode=S_IFREG|0755, st_size=1441281, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7f3b000
mmap2(NULL, 1240284, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb7e0c000
mmap2(0xb7f35000, 16384, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x128) = 0xb7f35000
mmap2(0xb7f39000, 7388, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xb7f39000
close(3)                                = 0
open("/lib/tls/libpthread.so.0", O_RDONLY) = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\20H\0\000"..., 512) = 512
fstat64(3, {st_mode=S_IFREG|0755, st_size=88005, ...}) = 0
mmap2(NULL, 70104, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb7dfa000
mmap2(0xb7e08000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0xd) = 0xb7e08000
mmap2(0xb7e0a000, 4568, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xb7e0a000
close(3)                                = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7df9000
mprotect(0xb7f35000, 4096, PROT_READ)   = 0
set_thread_area({entry_number:-1 -> 6, base_addr:0xb7df96c0, limit:1048575, seg_32bit:1, contents:0, read_exec_only:0, limit_in_pages:1, seg_not_present:0, useable:1}) = 0
munmap(0xb7f44000, 89992)               = 0
set_tid_address(0xb7df9708)             = 4293
rt_sigaction(SIGRTMIN, {0xb7dfe3a0, [], SA_SIGINFO}, NULL, 8) = 0       
rt_sigaction(SIGRT_1, {0xb7dfe420, [], SA_RESTART|SA_SIGINFO}, NULL, 8) = 0
rt_sigprocmask(SIG_UNBLOCK, [RTMIN RT_1], NULL, 8) = 0
getrlimit(RLIMIT_STACK, {rlim_cur=8192*1024, rlim_max=RLIM_INFINITY}) = 0
_sysctl({{CTL_KERN, KERN_VERSION}, 2, 0xbfa6f11c, 44, (nil), 0}) = 0
statfs("/dev/shm", {f_type=0x1021994, f_bsize=4096, f_blocks=48014, f_bfree=48013, f_bavail=48013, f_files=48014, f_ffree=48012, f_fsid={0, 0}, f_namelen=255, f_frsize=4096}) = 0
futex(0xb7e0b188, FUTEX_WAKE, 2147483647) = 0
open("/dev/shm/sem.ciao", O_RDWR|O_NOFOLLOW) = 3
fstat64(3, {st_mode=S_IFREG|04, st_size=16, ...}) = 0
brk(0)                                  = 0x804a000
brk(0x806b000)                          = 0x806b000
mmap2(NULL, 16, PROT_READ|PROT_WRITE, MAP_SHARED, 3, 0) = 0xb7f59000
close(3)                                = 0
fstat64(1, {st_mode=S_IFCHR|0700, st_rdev=makedev(136, 4), ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7f58000
write(1, "valore 0", 8valore 0)                 = 8
munmap(0xb7f58000, 4096)                = 0
exit_group(0)                           = ?
Process 4293 detached
__________________
Ciao ~ZeRO sTrEsS~
beppegrillo è offline   Rispondi citando il messaggio o parte di esso
Old 05-06-2006, 17:17   #8
beppegrillo
Senior Member
 
L'Avatar di beppegrillo
 
Iscritto dal: Mar 2004
Messaggi: 1451
Questo è quello che accade senza shm.
Da notare che ora mi è successa una cosa strana, ovvero avevo shm montato, do un umount /dev/shm lancio il programma e sembra andare, poi ho tolto la rispettiva riga da /etc/fstab e mi dice

semaforo: Function not implemented


Codice:
execve("./semaforo", ["./semaforo"], [/* 45 vars */]) = 0
uname({sys="Linux", node="WhiteStar", ...}) = 0
brk(0)                                  = 0x804a000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY)      = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=89992, ...}) = 0
mmap2(NULL, 89992, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7fc1000
close(3)                                = 0
open("/lib/tls/librt.so.1", O_RDONLY)   = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0`\35\0\000"..., 512) = 512
fstat64(3, {st_mode=S_IFREG|0755, st_size=34763, ...}) = 0
mmap2(NULL, 29260, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb7fb9000
mmap2(0xb7fbf000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x5) = 0xb7fbf000
close(3)                                = 0
open("/lib/tls/libc.so.6", O_RDONLY)    = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\20O\1\000"..., 512) = 512
fstat64(3, {st_mode=S_IFREG|0755, st_size=1441281, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7fb8000
mmap2(NULL, 1240284, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb7e89000
mmap2(0xb7fb2000, 16384, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x128) = 0xb7fb2000
mmap2(0xb7fb6000, 7388, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xb7fb6000
close(3)                                = 0
open("/lib/tls/libpthread.so.0", O_RDONLY) = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\20H\0\000"..., 512) = 512
fstat64(3, {st_mode=S_IFREG|0755, st_size=88005, ...}) = 0
mmap2(NULL, 70104, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb7e77000
mmap2(0xb7e85000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0xd) = 0xb7e85000
mmap2(0xb7e87000, 4568, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xb7e87000
close(3)                                = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7e76000
mprotect(0xb7fb2000, 4096, PROT_READ)   = 0
set_thread_area({entry_number:-1 -> 6, base_addr:0xb7e766c0, limit:1048575, seg_32bit:1, contents:0, read_exec_only:0, limit_in_pages:1, seg_not_present:0, useable:1}) = 0
munmap(0xb7fc1000, 89992)               = 0
set_tid_address(0xb7e76708)             = 4315
rt_sigaction(SIGRTMIN, {0xb7e7b3a0, [], SA_SIGINFO}, NULL, 8) = 0
rt_sigaction(SIGRT_1, {0xb7e7b420, [], SA_RESTART|SA_SIGINFO}, NULL, 8) = 0
rt_sigprocmask(SIG_UNBLOCK, [RTMIN RT_1], NULL, 8) = 0
getrlimit(RLIMIT_STACK, {rlim_cur=8192*1024, rlim_max=RLIM_INFINITY}) = 0
_sysctl({{CTL_KERN, KERN_VERSION}, 2, 0xbfee944c, 44, (nil), 0}) = 0
statfs("/dev/shm", {f_type="EXT2_SUPER_MAGIC", f_bsize=4096, f_blocks=9340888, f_bfree=7893910, f_bavail=7411760, f_files=9647680, f_ffree=9476792, f_fsid={0, 0}, f_namelen=255, f_frsize=4096}) = 0
brk(0)                                  = 0x804a000
brk(0x806b000)                          = 0x806b000
open("/proc/mounts", O_RDONLY)          = 3
fstat64(3, {st_mode=S_IFREG|0444, st_size=0, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7fd6000
read(3, "rootfs / rootfs rw 0 0\n/dev/root"..., 1024) = 170
read(3, "", 1024)                       = 0
close(3)                                = 0
munmap(0xb7fd6000, 4096)                = 0
futex(0xb7e88188, FUTEX_WAKE, 2147483647) = 0
dup(2)                                  = 3
fcntl64(3, F_GETFL)                     = 0x2 (flags O_RDWR)
fstat64(3, {st_mode=S_IFCHR|0700, st_rdev=makedev(136, 4), ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7fd6000
_llseek(3, 0, 0xbfee9140, SEEK_CUR)     = -1 ESPIPE (Illegal seek)
write(3, "semaforo: Function not implement"..., 35semaforo: Function not implemented
) = 35
close(3)                                = 0
munmap(0xb7fd6000, 4096)                = 0
exit_group(-1)                          = ?
Process 4315 detached
__________________
Ciao ~ZeRO sTrEsS~
beppegrillo è offline   Rispondi citando il messaggio o parte di esso
Old 05-06-2006, 19:07   #9
beppegrillo
Senior Member
 
L'Avatar di beppegrillo
 
Iscritto dal: Mar 2004
Messaggi: 1451
Accessing named semaphores via the file system
On Linux, named semaphores are created in a virtual file system, normally mounted under /dev/shm, with names of the form
sem.name.

Da man sem_overview
__________________
Ciao ~ZeRO sTrEsS~
beppegrillo è offline   Rispondi citando il messaggio o parte di esso
Old 06-06-2006, 08:00   #10
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Già, un oggetto "named" corrisponde a qualche oggetto sul file system.

Ho provato il programma e, almeno da me, funziona in maniera identica sia con /dev/shm montata o non. Viene sempre scritto un file in /dev/shm e, a parte il piccolo fastidio di doverlo eseguire con i privilegi di root se /dev/shm non è montato, non ho visto altre differenze.

L'errore "Function not implement" che leggo dalla tua strace è fuorviante, in quanto non è l'errore ritornato da una syscall che non esiste, ma un errore inventato di sana pianta dalle tue libc. Non c'è infatti nessuna syscall che ritorna -1 con ENOSYS.

Questo è il mio trace con un normale ext2 montato su /dev/shm:

Codice:
execve("./sem", ["./sem"], [/* 41 vars */]) = 0
uname({sys="Linux", node="kano.giancarlo.net", ...}) = 0
brk(0)                                  = 0x804a000
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
mmap2(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7fb6000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY)      = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=89459, ...}) = 0
mmap2(NULL, 89459, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7fa0000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
open("/lib/tls/librt.so.1", O_RDONLY)   = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0`\35\0\000"..., 512) = 512
fstat64(3, {st_mode=S_IFREG|0644, st_size=30612, ...}) = 0
mmap2(NULL, 29264, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb7f98000
mmap2(0xb7f9e000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x6) = 0xb7f9e000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
open("/lib/tls/libc.so.6", O_RDONLY)    = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\260O\1"..., 512) = 512
fstat64(3, {st_mode=S_IFREG|0755, st_size=1270928, ...}) = 0
mmap2(NULL, 1276892, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb7e60000
mmap2(0xb7f8e000, 32768, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x12e) = 0xb7f8e000
mmap2(0xb7f96000, 7132, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xb7f96000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
open("/lib/tls/libpthread.so.0", O_RDONLY) = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\340G\0"..., 512) = 512
fstat64(3, {st_mode=S_IFREG|0755, st_size=85770, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7e5f000
mmap2(NULL, 70104, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb7e4d000
mmap2(0xb7e5b000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0xd) = 0xb7e5b000
mmap2(0xb7e5d000, 4568, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xb7e5d000
close(3)                                = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7e4c000
mprotect(0xb7f8e000, 20480, PROT_READ)  = 0
set_thread_area({entry_number:-1 -> 6, base_addr:0xb7e4c6c0, limit:1048575, seg_32bit:1, contents:0, read_exec_only:0, limit_in_pages:1, seg_not_present:0, useable:1}) = 0
munmap(0xb7fa0000, 89459)               = 0
set_tid_address(0xb7e4c708)             = 9857
rt_sigaction(SIGRTMIN, {0xb7e51360, [], SA_SIGINFO}, NULL, 8) = 0
rt_sigaction(SIGRT_1, {0xb7e513e0, [], SA_RESTART|SA_SIGINFO}, NULL, 8) = 0
rt_sigprocmask(SIG_UNBLOCK, [RTMIN RT_1], NULL, 8) = 0
getrlimit(RLIMIT_STACK, {rlim_cur=8192*1024, rlim_max=RLIM_INFINITY}) = 0
_sysctl({{CTL_KERN, KERN_VERSION}, 2, 0xbfb1a920, 43, (nil), 0}) = 0
statfs("/dev/shm", {f_type="EXT2_SUPER_MAGIC", f_bsize=1024, f_blocks=9911, f_bfree=9819, f_bavail=9307, f_files=2560, f_ffree=2549, f_fsid={0, 0}, f_namelen=255, f_frsize=1024}) = 0
brk(0)                                  = 0x804a000
brk(0x806b000)                          = 0x806b000
open("/proc/mounts", O_RDONLY)          = 3
fstat64(3, {st_mode=S_IFREG|0444, st_size=0, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7fb5000
read(3, "rootfs / rootfs rw 0 0\n/dev/root"..., 1024) = 465
statfs("/dev", {f_type=0x1021994, f_bsize=4096, f_blocks=2560, f_bfree=2527, f_bavail=2527, f_files=129516, f_ffree=129262, f_fsid={0, 0}, f_namelen=255, f_frsize=4096}) = 0
close(3)                                = 0
munmap(0xb7fb5000, 4096)                = 0
futex(0xb7e5e188, FUTEX_WAKE, 2147483647) = 0
open("/dev/sem.ciao", O_RDWR|O_NOFOLLOW) = -1 ENOENT (No such file or directory)
gettimeofday({1149584441, 562242}, NULL) = 0
lstat64("/dev/sem.ofdxuP", 0xbfb1aa7c)  = -1 ENOENT (No such file or directory)
open("/dev/sem.ofdxuP", O_RDWR|O_CREAT|O_EXCL, 04) = 3
write(3, "\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", 16) = 16
mmap2(NULL, 16, PROT_READ|PROT_WRITE, MAP_SHARED, 3, 0) = 0xb7fb5000
link("/dev/sem.ofdxuP", "/dev/sem.ciao") = 0
fstat64(3, {st_mode=S_IFREG|04, st_size=16, ...}) = 0
unlink("/dev/sem.ofdxuP")               = 0
close(3)                                = 0
fstat64(1, {st_mode=S_IFREG|0644, st_size=4567, ...}) = 0
mmap2(NULL, 131072, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7e2c000
write(1, "valore 0", 8valore 0)                 = 8
munmap(0xb7e2c000, 131072)              = 0
exit_group(0)                           = ?
Process 9857 detached
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 06-06-2006, 08:04   #11
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
[edit] errore
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12

Ultima modifica di ilsensine : 06-06-2006 alle 08:07.
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 06-06-2006, 08:15   #12
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Ah ho visto l'arcano...ho un tmpfs montato su /dev, e la mia sem_open ha arbitrariamente deciso di utilizzare il primo tmpfs che ha trovato montato, quindi mi ha scritto i file in.../dev!

Non me ne ero accorto inizialmente.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 06-06-2006, 14:26   #13
beppegrillo
Senior Member
 
L'Avatar di beppegrillo
 
Iscritto dal: Mar 2004
Messaggi: 1451
sensine come faccio a cambiare i permessi ad un semaforo posix?
Con SV è molto semplice, ma con POSIX mi ci stò perdendo tra strutture complesse ed "opache"..
__________________
Ciao ~ZeRO sTrEsS~
beppegrillo è offline   Rispondi citando il messaggio o parte di esso
Old 06-06-2006, 15:15   #14
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
E' il terzo parametro della sem_open. Al posto delle macro illegibili quali S_IROTH, preferisco usare direttamente il codice ottale, quale ad es. 0644.
Occhio che il valore viene messo in "and" con ~umask. Puoi usare la funzione umask() per cambiare il valore relativamente al processo, se ti serve.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 06-06-2006, 15:29   #15
beppegrillo
Senior Member
 
L'Avatar di beppegrillo
 
Iscritto dal: Mar 2004
Messaggi: 1451
Quote:
Originariamente inviato da ilsensine
E' il terzo parametro della sem_open. Al posto delle macro illegibili quali S_IROTH, preferisco usare direttamente il codice ottale, quale ad es. 0644.
Occhio che il valore viene messo in "and" con ~umask. Puoi usare la funzione umask() per cambiare il valore relativamente al processo, se ti serve.
si certo scusami, mi sono espresso male.
Intendevo dire, una volta che ho creato il mio semaforo nominato, ora ho due operazioni da fare :
1) Poter cambiare i permessi
2) Fare un listing dei permessi su un semaforo

Ora la prima cosa si potrebbe fare in maniera un pò "brutale", cancellando il semaforo e ricreandolo con i permessi scelti, per la seconda, non ho idea dove guardare..
__________________
Ciao ~ZeRO sTrEsS~
beppegrillo è offline   Rispondi citando il messaggio o parte di esso
Old 06-06-2006, 15:49   #16
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Visto che è un file, basterebbe cambiare i permessi sul file. Il problema è che, visto il mio "incidente", non è corretto assumere che il semaforo sia locato in /dev/shm.

Per i semafori IPC, i permessi si possono cambiare con semctl. Non so se questa funzione si comporta correttamente anche con i semafori RT, anzi la documentazione dice semplicemente che è "unspecified". Visto però che in genere gli oggetti IPC fanno uso internamente di tecniche simili alla shm, potrebbe funzionare -- prova.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 06-06-2006, 16:55   #17
beppegrillo
Senior Member
 
L'Avatar di beppegrillo
 
Iscritto dal: Mar 2004
Messaggi: 1451
Quote:
Originariamente inviato da ilsensine
Visto che è un file, basterebbe cambiare i permessi sul file. Il problema è che, visto il mio "incidente", non è corretto assumere che il semaforo sia locato in /dev/shm.

Per i semafori IPC, i permessi si possono cambiare con semctl. Non so se questa funzione si comporta correttamente anche con i semafori RT, anzi la documentazione dice semplicemente che è "unspecified". Visto però che in genere gli oggetti IPC fanno uso internamente di tecniche simili alla shm, potrebbe funzionare -- prova.
Usando cmtl ed emulando un pò ipcs riesco ad ottenere le informazioni sui semafori, compreso i permessi. Ho provato anche a cambiare il campo mode in 0777, ma pare che non cambi nulla.
C'è però un piccolo problema, l'esercizio chiede che si utilizzino solo chiamate posix, in questo modo starei usando strutture System V e semctl che mi pare operi su SV.
Credo una soluzione utilizzando solo posix, sarebbe quella di crearsi un file di testo con tutti i nomi dei semafori creati, ogni qual volta mi viene richiesto di cambiare i permessi, cancello l'attuale semaforo e ne ricreo uno con i permessi scelti..
Non mi piace molto ,ma vedo poche vie di uscita, che siano minimamente portabili :\
__________________
Ciao ~ZeRO sTrEsS~
beppegrillo è offline   Rispondi citando il messaggio o parte di esso
Old 06-06-2006, 17:02   #18
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Anche semget & co sono POSIX
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 06-06-2006, 17:20   #19
beppegrillo
Senior Member
 
L'Avatar di beppegrillo
 
Iscritto dal: Mar 2004
Messaggi: 1451
Quote:
Originariamente inviato da ilsensine
Anche semget & co sono POSIX
Capisco, a stò punto quindi il problema è quello di usare strutture System V.
Ecco una parte del codice che ho usato
Codice:
 struct seminfo seminfo;
    struct semid_ds semary;
    struct ipc_perm *ipcp = &semary.sem_perm;
    union semun arg;
    int max_id, semid, id = 0;
    struct passwd *pw;

    arg.array = (ushort *) (void*) &seminfo;
    max_id = semctl(0,0,SEM_INFO,arg);
    printf("------- Semaphores -------\n");
    printf("%-10s %-10s %-10s %-10s\n","Key","Semid","Owner","Perms");

    for(id = 0;id<=max_id;id++) {
        arg.buf = (struct semid_ds *) &semary;
        semid = semctl (id, 0, SEM_STAT, arg);
        pw = getpwuid(ipcp->uid);
        printf("%-10d %-10d %-10.10s %-10o\n",ipcp->__key,semid,pw->pw_name,ipcp->mode & 0777);
        ipcp->mode = (unsigned short) 0777;
        printf("\n%10o\n",ipcp->mode & 0777);
}
Viene cambiato, però mi pare non lo sia realmente..
__________________
Ciao ~ZeRO sTrEsS~
beppegrillo è offline   Rispondi citando il messaggio o parte di esso
Old 06-06-2006, 17:30   #20
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Se non usi IPC_SET non vedo come possa cambiare...

Dove hai trovato documentati SEM_INFO e SEM_STAT? Non le vedo nella manpage...
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


GIGABYTE GAMING A16, Raptor Lake e RTX 5060 Laptop insieme per giocare al giusto prezzo GIGABYTE GAMING A16, Raptor Lake e RTX 5060 Lapt...
iPhone 17 Pro: più di uno smartphone. È uno studio di produzione in formato tascabile iPhone 17 Pro: più di uno smartphone. &Eg...
Intel Panther Lake: i processori per i notebook del 2026 Intel Panther Lake: i processori per i notebook ...
Intel Xeon 6+: è tempo di Clearwater Forest Intel Xeon 6+: è tempo di Clearwater Fore...
4K a 160Hz o Full HD a 320Hz? Titan Army P2712V, a un prezzo molto basso 4K a 160Hz o Full HD a 320Hz? Titan Army P2712V,...
Start Cup Puglia 2025: il 16 ottobre la ...
Incentivi auto elettriche, falsa partenz...
Silence crea anche in Francia una rete d...
La realtà mista al servizio degli...
Nothing ha un altro smartphone in progra...
Decisione storica ad Amburgo: i cittadin...
Questo è il nuovo motore elettric...
HUAWEI WATCH GT 6: lo smartwatch 'infini...
Fotografia con AI: ecco Caira, la macchi...
PlayStation 6 vs Xbox Magnus: il rumor s...
DJI Osmo Action 4 a soli 208€ su Amazon:...
Irion, la data governance diventa strate...
EHang VT35: debutta in Cina il nuovo aer...
Cooler Master MasterLiquid Atmos II 360:...
Trapela in rete la roadmap dei nuovi gio...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 22:53.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v