Differenze tra le versioni di "Poll ()"

Da Gambas-it.org - Wikipedia.
Riga 1: Riga 1:
 
La funzione
 
La funzione
 
  int poll (struct pollfd *__fds, nfds_t __nfds, int __timeout)
 
  int poll (struct pollfd *__fds, nfds_t __nfds, int __timeout)
attende un evento su un descrittore di file (''file descriptor''). In particolare la funzione ''poll( )'' permette ad un programma di monitorare un descrittore di file, ossia di restare in attesa fino a quando il descrittore di file ''osservato'' non diventa "pronto" per eseguire un'operazione di I/O sul suo file corrispondente (ad esempio, leggere senza bloccare o effettuarvi una breve scrittura).
+
attende un evento su un descrittore di file (''file descriptor''). In particolare la funzione "poll()" permette ad un programma di monitorare un descrittore di file, ossia di restare in attesa fino a quando il descrittore di file ''osservato'' non diventa "pronto" per eseguire un'operazione di I/O sul suo file corrispondente (ad esempio, leggere senza bloccare o effettuarvi una breve scrittura).
  
Si è notato che la funzione ''poll( )'' funziona, come dovuto, solo utilizzando le funzioni esterne delle librerie standard di C, all'uopo previste per l'apertura del file-device e la lettura del relativo file-descriptor.
+
Si è notato che la funzione "poll()" funziona, come dovuto, solo utilizzando le funzioni esterne delle librerie standard di C, all'uopo previste per l'apertura del file-device e la lettura del relativo ''file-descriptor''.
  
  
 
Volendo utilizzare tale funzione in Gambas, bisognerà dichiararla con ''Extern'', nonché bisognerà dichiarare la libreria di C: ''libc.so.6'', nella quale essa è contenuta:
 
Volendo utilizzare tale funzione in Gambas, bisognerà dichiararla con ''Extern'', nonché bisognerà dichiarare la libreria di C: ''libc.so.6'', nella quale essa è contenuta:
 
  Private <FONT color=#B22222>Extern poll</font>(__fds As Pollfd, __nfds As Long, __timeout As Integer) As Integer
 
  Private <FONT color=#B22222>Extern poll</font>(__fds As Pollfd, __nfds As Long, __timeout As Integer) As Integer
 
+
Mostriamo un semplice esempio, nel quale si porrà sotto ''osservazione'' in lettura il file-device "''/dev/input/mouse0'' " del mouse. Se giungono dati dal file-device, il ''file-descriptor'' è <U>pronto</u> per essere letto; e pertanto si raccoglieranno appunto i dati provenienti dal predetto file-device del mouse. Ai fini del seguente esempio va ricordato che il file-device "''/dev/input/mouse0'' " è protetto; pertanto bisognerà preliminarmente cambiare i suoi permessi.
 
 
Mostriamo un semplice esempio, nel quale si porrà sotto ''osservazione'' in lettura il file-device "''/dev/input/mouse0''" del mouse. Se giungono dati dal file-device, il file-descriptor è ''pronto'' per essere letto; e pertanto si raccoglieranno appunto i dati provenienti dal predetto file-device del mouse. Ai fini del seguente esempio va ricordato che il file-device "''/dev/input/mouse0''" è protetto; pertanto bisognerà preliminarmente cambiare i suoi permessi.
 
 
  Library "libc:6"
 
  Library "libc:6"
 
   
 
   
Riga 39: Riga 37:
 
   
 
   
 
   
 
   
  '''Public''' Sub Main()
+
  Public Sub Main()
 
   
 
   
 
   Dim pfd As New Pollfd
 
   Dim pfd As New Pollfd
Riga 45: Riga 43:
 
   Dim buf As Pointer
 
   Dim buf As Pointer
 
    
 
    
    microsec = 10
+
  microsec = 10
    buf = Alloc(SizeOf(gb.Byte), 8)
+
  buf = Alloc(SizeOf(gb.Byte), 8)
 
      
 
      
     While True
+
  Do
     
+
     pfd.fd = open_C("/dev/input/mouse0", O_RDONLY)
      pfd.fd = open_C("/dev/input/mouse0", O_RDONLY)
+
    pfd.events = POLLIN
      pfd.events = POLLIN
+
     rit = <FONT color=#B22222>poll</font>(pfd, 1, microsec)
      
+
    read_C(pfd.fd, buf, 8)
      rit = <FONT color=#B22222>poll</font>(pfd, 1, microsec)
+
  <FONT Color=gray>' ''Vengono mostrati i dati intercettati dal file-device del mouse in caso di spostamento del mouse, nonché pressione dei tasti e della rotellina:''</font>
     
+
    Print Right(CStr(Pointer@(buf)), 6)
      read_C(pfd.fd, buf, 8)
+
    close_C(pfd.fd)
   
+
  Loop
  <FONT Color=gray>' ''Vengono mostrati i dati intercettati dal file-device del mouse
+
' ''in caso di spostamento del mouse, nonché pressione dei tasti e della rotellina:''</font>
+
  End
      Print Right(CStr(Pointer@(buf)), 6)
 
     
 
      close_C(pfd.fd)
 
     
 
    Wend
 
 
 
  '''End'''
 
 
 
  
  

Versione delle 15:46, 15 giu 2024

La funzione

int poll (struct pollfd *__fds, nfds_t __nfds, int __timeout)

attende un evento su un descrittore di file (file descriptor). In particolare la funzione "poll()" permette ad un programma di monitorare un descrittore di file, ossia di restare in attesa fino a quando il descrittore di file osservato non diventa "pronto" per eseguire un'operazione di I/O sul suo file corrispondente (ad esempio, leggere senza bloccare o effettuarvi una breve scrittura).

Si è notato che la funzione "poll()" funziona, come dovuto, solo utilizzando le funzioni esterne delle librerie standard di C, all'uopo previste per l'apertura del file-device e la lettura del relativo file-descriptor.


Volendo utilizzare tale funzione in Gambas, bisognerà dichiararla con Extern, nonché bisognerà dichiarare la libreria di C: libc.so.6, nella quale essa è contenuta:

Private Extern poll(__fds As Pollfd, __nfds As Long, __timeout As Integer) As Integer

Mostriamo un semplice esempio, nel quale si porrà sotto osservazione in lettura il file-device "/dev/input/mouse0 " del mouse. Se giungono dati dal file-device, il file-descriptor è pronto per essere letto; e pertanto si raccoglieranno appunto i dati provenienti dal predetto file-device del mouse. Ai fini del seguente esempio va ricordato che il file-device "/dev/input/mouse0 " è protetto; pertanto bisognerà preliminarmente cambiare i suoi permessi.

Library "libc:6"

Private Const POLLIN As Integer = 1
Private Const O_RDONLY As Integer = 0

Public Struct Pollfd
  fd As Integer
  events As Short
  revents As Short
End Struct

' int open (const char *__file, int __oflag, ...)
' Open FILE and return a new file descriptor for it, or -1 on error.
Private Extern open_C(__file As String, __oflag As Integer) As Integer Exec "open"

' int poll (struct pollfd *__fds, nfds_t __nfds, int __timeout)
' Poll the file descriptors described by the NFDS structures starting at FDS.
Private Extern poll(__fds As Pollfd, __nfds As Long, __timeout As Integer) As Integer

' ssize_t read (int __fd, void *__buf, size_t __nbytes)
' Read NBYTES into BUF from FD.
Private Extern read_C(__fd As Integer, __buf As Pointer, __nbytes As Long) As Long Exec "read"

' int close (int __fd)
' Close the file descriptor FD.
Private Extern close_C(__fd As Integer) As Integer Exec "close"


Public Sub Main()

 Dim pfd As New Pollfd
 Dim microsec, rit As Integer
 Dim buf As Pointer
 
 microsec = 10
 buf = Alloc(SizeOf(gb.Byte), 8)
   
 Do
   pfd.fd = open_C("/dev/input/mouse0", O_RDONLY)
   pfd.events = POLLIN
   rit = poll(pfd, 1, microsec)
   read_C(pfd.fd, buf, 8)
' Vengono mostrati i dati intercettati dal file-device del mouse in caso di spostamento del mouse, nonché pressione dei tasti e della rotellina:
   Print Right(CStr(Pointer@(buf)), 6)
   close_C(pfd.fd)
 Loop

End


Riferimenti