Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria
Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria
vivo X300 Pro rappresenta un'evoluzione misurata della serie fotografica del produttore cinese, con un sistema di fotocamere migliorato, chipset Dimensity 9500 di ultima generazione e l'arrivo dell'interfaccia OriginOS 6 anche sui modelli internazionali. La scelta di limitare la batteria a 5.440mAh nel mercato europeo, rispetto ai 6.510mAh disponibili altrove, fa storcere un po' il naso
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2 è la nuova handheld PC gaming con processore AMD Ryzen Z2 Extreme (8 core Zen 5/5c, GPU RDNA 3.5 16 CU) e schermo OLED 8,8" 1920x1200 144Hz. È dotata anche di controller rimovibili TrueStrike con joystick Hall effect e una batteria da 74Wh. Rispetto al dispositivo che l'ha preceduta, migliora ergonomia e prestazioni a basse risoluzioni, ma pesa 920g e costa 1.299€ nella configurazione con 32GB RAM/1TB SSD e Z2 Extreme
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
A re:Invent 2025, AWS mostra un’evoluzione profonda della propria strategia: l’IA diventa una piattaforma di servizi sempre più pronta all’uso, con agenti e modelli preconfigurati che accelerano lo sviluppo, mentre il cloud resta la base imprescindibile per governare dati, complessità e lock-in in uno scenario sempre più orientato all’hybrid cloud
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 26-07-2004, 02:09   #1
Ed_Bunker
Senior Member
 
L'Avatar di Ed_Bunker
 
Iscritto dal: Jan 2004
Città: Montignoso(MS)
Messaggi: 9456
[C] Open e read su una pipe con nome

Ciao, ho un "astioso" problema che da qualche giorno mi affligge... Un processo server legge richieste da una pipe con nome la quale, prima di iniziare ad effettuare le letture, viene aperta in sola lettura. Siccome la open su una pipe e' bloccante, quando essa ritorna c'e' sicuramente un client che ha aperto la pipe stessa in scrittura e, quindi, quando il server effettuera' la read, essa:
_ o ritornera' il numero di bytes letti
_ oppure risultera' a sua volta bloccante fintanto che non c'e' qualche byte da leggere.
E fin qui e' proprio il comportamento che vorrei fosse tenuto dal server.
L'inconveniente e':
se c'e' un solo client con la pipe aperta in scrittura, quando esso, una volta ricevuta la risposta dal server, chiudera' la pipe in scrittura il server rimarra' (Non si sa quanto) con una pipe aperta in lettura senza che nessuno ce l'abbia aperta in scrittura.
A questo punto ogni read che il server effettuera' ritornera' 0 senza che si abbia lo "sperato" comportamento bloccante. Siccome vorrei evitare, ovviamente, attesa attiva come potrei fare per fare in modo che, anche quando il server rimane con la pipe aperta in sola lettura (Senza che nessuno l'abbia aperta in scrittura), possa effettuare delle read bloccanti evitando attesa attiva ?!? C'e' qualche "scappatoia" o qualche soluzione logica... alla quale la mia mente bacata non ha pensato ?!?

P.S.: avevo pensato di far aprire al server la pipe in modalita' scrittura/lettura in modo che l'effetto bloccante sia sempre dato dalla read (Mentre la open in scrittura/lettura sara' no bloccante). Ma non so se sia "eticamente" corretto...

thks
__________________
"Il Meglio che si possa ottenere è evitare il peggio." I.C.
Ed_Bunker è offline   Rispondi citando il messaggio o parte di esso
Old 26-07-2004, 11:24   #2
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Una poll prima della read?
__________________
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 26-07-2004, 11:38   #3
Ed_Bunker
Senior Member
 
L'Avatar di Ed_Bunker
 
Iscritto dal: Jan 2004
Città: Montignoso(MS)
Messaggi: 9456
Quote:
Originariamente inviato da ilsensine
Una poll prima della read?
Ok sembra quello che fa per me .

Altra domanda: avevo provato ad aprire la pipe prima in modalita' O_RDONLY (Bloccante sino a che il capo in scrittura non viene aperto da qualcuno) e subito dopo anche in modalita' O_WRONLY (Senza utilizzare il descrittore restituito ma solo per evitare che future read potessero restituire 0 come valore di ritorno). La prima lettura viene eseguita correttamente e la richiesta viene soddisfatta mentre, quando il server legge la seconda volta dalla pipe, la read restituisce -1 e la variabile errno mi urla in faccia: "Interrupted System Call".
A cosa potrebbe essere dovuto !? Ad un segnale non catturato o mal gestito o a cos'altro ?!

thks
__________________
"Il Meglio che si possa ottenere è evitare il peggio." I.C.
Ed_Bunker è offline   Rispondi citando il messaggio o parte di esso
Old 26-07-2004, 11:56   #4
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Dovresti essere sempre preparato a un EINTR. Se ti capita, devi semplicemente rieseguire la read.
EINTR viene generato ogni volta che arriva un segnale; non è un errore vero e proprio, ma una notifica.
__________________
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 26-07-2004, 13:14   #5
Ed_Bunker
Senior Member
 
L'Avatar di Ed_Bunker
 
Iscritto dal: Jan 2004
Città: Montignoso(MS)
Messaggi: 9456
Quote:
Originariamente inviato da ilsensine
Dovresti essere sempre preparato a un EINTR. Se ti capita, devi semplicemente rieseguire la read.
EINTR viene generato ogni volta che arriva un segnale; non è un errore vero e proprio, ma una notifica.
Si, infatti ottenfo un EINTR. Il fatto e' che anche nelle successive read (alla seconda) continuo ad ottenere degli EINTR all'infinito. E non so proprio perche'...
__________________
"Il Meglio che si possa ottenere è evitare il peggio." I.C.
Ed_Bunker è offline   Rispondi citando il messaggio o parte di esso
Old 26-07-2004, 13:40   #6
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Strano...prova a definire un signalhandler per SIGPIPE
Oppure, ancora meglio: chiudi la pipe e riaprila...credo che le pipe abbiano un comportamento un pò "particolare".
__________________
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 26-07-2004, 13:58   #7
Ed_Bunker
Senior Member
 
L'Avatar di Ed_Bunker
 
Iscritto dal: Jan 2004
Città: Montignoso(MS)
Messaggi: 9456
Quote:
Originariamente inviato da ilsensine
Strano...prova a definire un signalhandler per SIGPIPE
Oppure, ancora meglio: chiudi la pipe e riaprila...credo che le pipe abbiano un comportamento un pò "particolare".
Trovato l'errore: derivava da uno sbaglio sulla sigaction per gestire il SIGCHLD...
Aprendo prima in lettura e poi in scrittura adesso funziona. Poi ho provato con la poll ma mi da qualche problema. In particolar modo quando la pipe rimane aperta in sola lettura dal server (Poiche' il primo client l'ha chiusa in scrittura) al ciclo successivo la poll non ha effetto bloccante (Perche?!?) e stessa cosa nelle chiamate successive anche se nessun client apre e chiude la pipe in scrittura. In questo modo ogni volta viene effettuata una read che ritorna (Come atteso) 0.
__________________
"Il Meglio che si possa ottenere è evitare il peggio." I.C.
Ed_Bunker è offline   Rispondi citando il messaggio o parte di esso
Old 26-07-2004, 14:10   #8
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Sto dando una occhiata; stai usando dei file di tipo pipe aperti con open() oppure la syscall pipe() ?
__________________
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 26-07-2004, 15:03   #9
Ed_Bunker
Senior Member
 
L'Avatar di Ed_Bunker
 
Iscritto dal: Jan 2004
Città: Montignoso(MS)
Messaggi: 9456
Quote:
Originariamente inviato da ilsensine
Sto dando una occhiata; stai usando dei file di tipo pipe aperti con open() oppure la syscall pipe() ?
Utilizzo la 'normale' open
__________________
"Il Meglio che si possa ottenere è evitare il peggio." I.C.
Ed_Bunker è offline   Rispondi citando il messaggio o parte di esso
Old 26-07-2004, 15:10   #10
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Bene, bene...ho appena visto che la "normale" open su un pipe è _bloccante_ (nota: la open stessa, non solo la read!)
Una open con O_NONBLOCK invece non è bloccante.

Inoltre sono riuscito a riprodurre il tuo problema: la poll che ritorna "1" ma la read che ritorna "0", dopo la chiusura del client. Se vai a vedere però cosa c'è nel campo "revents" della struttura della poll relativa al pipe, non c'è POLLIN, ma...16, che corrisponde a POLLHUP!

In sintesi: credo che quando l'altro capo della pipe viene chiuso, devi chiudere e riaprire il file pipe.
__________________
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 26-07-2004, 15:22   #11
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Ad esempio questo funziona...
Codice:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/poll.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

static void __attribute__((__noreturn__)) fail(const char *s) {
  perror(s);
  exit(-1);
}

int main(void) {
  int fd;
  int ret;
  char buf[4096];
  struct pollfd pfd;
reopen:
  fd = open("pipe_name", O_RDONLY|O_NONBLOCK);
  if(fd<0) fail("open");
  pfd.fd = fd;
  pfd.events = POLLIN;
  fprintf(stderr, "pipe aperto sul fd %d...\n", fd);
retry:
  ret = poll(&pfd, 1, -1);
  fprintf(stderr, "poll=%d revents=%d\n", ret, pfd.revents);
  if(pfd.revents&POLLIN) {
    ret = read(fd, buf, 4095);
    fprintf(stderr, "read=%d\n", ret);
    if(ret<=0) goto retry;
    buf[ret] = '\0';
    fprintf(stderr, "recv %s\n", buf);
    goto retry;
  } else if(pfd.revents&POLLHUP) {
    fprintf(stderr, "Hangup!\n");
    close(fd);
    goto reopen;
  } else {
    fprintf(stderr, "!?\n");
    goto retry;
  }
  return 0;
}
__________________
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 26-07-2004, 15:40   #12
Ed_Bunker
Senior Member
 
L'Avatar di Ed_Bunker
 
Iscritto dal: Jan 2004
Città: Montignoso(MS)
Messaggi: 9456
Quote:
Originariamente inviato da ilsensine
Ad esempio questo funziona...
Codice:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/poll.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

static void __attribute__((__noreturn__)) fail(const char *s) {
  perror(s);
  exit(-1);
}

int main(void) {
  int fd;
  int ret;
  char buf[4096];
  struct pollfd pfd;
reopen:
  fd = open("pipe_name", O_RDONLY|O_NONBLOCK);
  if(fd<0) fail("open");
  pfd.fd = fd;
  pfd.events = POLLIN;
  fprintf(stderr, "pipe aperto sul fd %d...\n", fd);
retry:
  ret = poll(&pfd, 1, -1);
  fprintf(stderr, "poll=%d revents=%d\n", ret, pfd.revents);
  if(pfd.revents&POLLIN) {
    ret = read(fd, buf, 4095);
    fprintf(stderr, "read=%d\n", ret);
    if(ret<=0) goto retry;
    buf[ret] = '\0';
    fprintf(stderr, "recv %s\n", buf);
    goto retry;
  } else if(pfd.revents&POLLHUP) {
    fprintf(stderr, "Hangup!\n");
    close(fd);
    goto reopen;
  } else {
    fprintf(stderr, "!?\n");
    goto retry;
  }
  return 0;
}
Pero' in questo modo potresti fare attesa attiva senza "accorgertene". O no ?!? Tu controlli il valore di ritorno della poll ed in tutti i casi o fai una poll successiva oppure passi a fare la read (Nel caso ret valga 1). Ma il fatto che ret valga 0 non dovrebbe essere un errore, visto che tu non hai imposto un timeout alla poll (-1 potrebbe invece verificarsi in caso d'errore) ?!? Ora riprovo...
__________________
"Il Meglio che si possa ottenere è evitare il peggio." I.C.
Ed_Bunker è offline   Rispondi citando il messaggio o parte di esso
Old 26-07-2004, 15:51   #13
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Quote:
Originariamente inviato da Ed_Bunker
Pero' in questo modo potresti fare attesa attiva senza "accorgertene". O no ?!?
Cosa vuol dire "attesa attiva"?
Quote:
Tu controlli il valore di ritorno della poll
Non ho controllato il valore di ritorno della poll in quanto nel mio esempio può solo essere 1. Nel tuo caso, dove gestisci dei segnali, può generare un EINTR.
Quello che controllo è "revents", ovvero lo stato del pipe.
Quote:
Ma il fatto che ret valga 0 non dovrebbe essere un errore
L'unico ret che controllo è quello della read; il controllo comunque è pura paranoia, in quanto non può che essere >0 nel mio esempio.
Nel tuo caso stai anche qui attento a EINTR.
__________________
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 26-07-2004, 16:07   #14
Ed_Bunker
Senior Member
 
L'Avatar di Ed_Bunker
 
Iscritto dal: Jan 2004
Città: Montignoso(MS)
Messaggi: 9456
Per attesa attiva indico la situazione nella quale si e' in attesa del verificarsi di un evento e, invece, di attendere che l'evento venga in qualche modo segnalato si continuano a fare delle chiamate (Che sprecano risorse) per capire se l'evento si e' verificato.

Tu controlli il valore di ritorno della read (Mi ero sbagliato nel dire che poll al posto di read ). Siccome la read viene effettuata dopo una poll essa dovrebbe restituire:
_-1 in caso d'errore (Ed errno settata)
_>0 altrimenti

Il fatto che venga fatta dopo una poll "impedisce" che la read restituisca un valore = 0. Il comportamento a quel punto dovrebbe essere bloccante. Mentre a me succede proprio questo ovvero la read mi restituisce 0 pur essendo chiamata dopo una poll.
__________________
"Il Meglio che si possa ottenere è evitare il peggio." I.C.

Ultima modifica di Ed_Bunker : 26-07-2004 alle 16:40.
Ed_Bunker è offline   Rispondi citando il messaggio o parte di esso
Old 26-07-2004, 16:27   #15
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Quote:
Originariamente inviato da Ed_Bunker
Per attesa attiva indico la situazione nella quale si e' in attesa del verificarsi di un evento e, invece, di attendere che l'evento venga in qualche modo segnalato si continuano a fare delle chiamate (Che sprecano risorse) per capire se l'evento si e' verificato.
E' proprio quello che fa la poll: mette a dormire il programma finché non si verifica un certo evento...
Utilizzo di risorse zero
__________________
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 26-07-2004, 16:39   #16
Ed_Bunker
Senior Member
 
L'Avatar di Ed_Bunker
 
Iscritto dal: Jan 2004
Città: Montignoso(MS)
Messaggi: 9456
Quote:
Originariamente inviato da ilsensine
E' proprio quello che fa la poll: mette a dormire il programma finché non si verifica un certo evento...
Utilizzo di risorse zero
Perfetto: proprio quello che "desideravo". Il fatto e' che le read dopo la poll mi ritornano 0 bytes letti (Mentre essendo chiamate dopo la poll dovrebbero ritornare un valore maggiore di 0 oppure -1 nel caso di errore). E' come se la poll rilevasse che ci sono bytes da leggere anche se in realta' non e' cosi'...

Boh...
__________________
"Il Meglio che si possa ottenere è evitare il peggio." I.C.
Ed_Bunker è offline   Rispondi citando il messaggio o parte di esso
Old 26-07-2004, 16:43   #17
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Quote:
Originariamente inviato da Ed_Bunker
Perfetto: proprio quello che "desideravo". Il fatto e' che le read dopo la poll mi ritornano 0 bytes letti (Mentre essendo chiamate dopo la poll dovrebbero ritornare un valore maggiore di 0 oppure -1 nel caso di errore). E' come se la poll rilevasse che ci sono bytes da leggere anche se in realta' non e' cosi'...
Non è possibile se la poll restituisce l'evento POLLIN. Controlli revents?
__________________
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 26-07-2004, 17:30   #18
Ed_Bunker
Senior Member
 
L'Avatar di Ed_Bunker
 
Iscritto dal: Jan 2004
Città: Montignoso(MS)
Messaggi: 9456
Quote:
Originariamente inviato da ilsensine
Non è possibile se la poll restituisce l'evento POLLIN. Controlli revents?
No, perche' avendo messo events = POLLIN la poll dovrebbe tornare solo in caso d'errore o in caso di nuovi bytes da leggere sulla pipe. A meno che non ritorni perche' viene sempre rilevato un errore...

Return Value:

On success, a positive number is returned, where the number returned is
the number of structures which have non-zero revents fields (in other
words, those descriptors with events or errors reported). A value of 0
indicates that the call timed out and no file descriptors have been
selected. On error, -1 is returned, and errno is set appropriately.
__________________
"Il Meglio che si possa ottenere è evitare il peggio." I.C.
Ed_Bunker è offline   Rispondi citando il messaggio o parte di esso
Old 26-07-2004, 17:35   #19
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Quote:
Originariamente inviato da Ed_Bunker
No, perche' avendo messo events = POLLIN la poll dovrebbe tornare solo in caso d'errore o in caso di nuovi bytes da leggere sulla pipe.
Suggerisco una lettura approfondita della manpage di poll
__________________
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 26-07-2004, 17:50   #20
Ed_Bunker
Senior Member
 
L'Avatar di Ed_Bunker
 
Iscritto dal: Jan 2004
Città: Montignoso(MS)
Messaggi: 9456
Quote:
Originariamente inviato da ilsensine
Suggerisco una lettura approfondita della manpage di poll
Ecco cosi' mi sono ribeccato un "cazziatone"...

Comunque ora e' ok. Penso il comportamento anomalo derivasse ancora dall'errore che avevo commesso nelle sigaction.
__________________
"Il Meglio che si possa ottenere è evitare il peggio." I.C.
Ed_Bunker è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria Recensione vivo X300 Pro: è ancora lui il...
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'...
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti AWS re:Invent 2025: inizia l'era dell'AI-as-a-Se...
Cos'è la bolla dell'IA e perché se ne parla Cos'è la bolla dell'IA e perché se...
BOOX Palma 2 Pro in prova: l'e-reader diventa a colori, e davvero tascabile BOOX Palma 2 Pro in prova: l'e-reader diventa a ...
Un gruppo di ladri ha usato Google Maps ...
Apple non si fida di Samsung per la real...
Windows 11: un nuovo driver nativo mette...
Vi hanno regalato buoni Amazon? Intanto ...
Via acari, polvere e sporco da materassi...
Cuffie Beats in super offerta su Amazon,...
Xbox Cloud Gaming arriva su Amazon Fire ...
Un blackout a San Francisco manda in til...
Windows 11 è diventato più...
Apple cambia strategia a causa della cri...
007 First Light: uscita rimandata di due...
Samsung Galaxy A37 e A57: il comparto fo...
DAZN lancia la sua offerta di Natale: My...
Gigabyte fa marcia indietro? Sparito il ...
Alcuni rivenditori giapponesi bloccano l...
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: 23:53.


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