La función mmap es muy importante, alsa conduce audio y video uac uvc y toda esta aplicación se convierte en un proceso, esta función también juega un papel clave.
root @ instance-tau7o2q5: ~ / app_modules # strace ./a. a cabo . execve ( " ./a.out " , [ " ./a.out " , " . " ], 0x7ffc78e587b8 / * 27 vars * / ) = 0 brk (NULL) = 0x559be8915000 acceso ( " /etc/ld.so. nohwcap " , F_OK) = - 1 ENOENT (No existe tal archivo o directorio) acceso ( " /etc/ld.so.preload " , R_OK) = - 1 ENOENT (No existe tal archivo o directorio) openat (AT_FDCWD, " /etc/ld.so.cache " , O_RDONLY | O_CLOEXEC) = 3 fstat ( 3 , {st_mode = S_IFREG | 0644 , st_size = 46616 , ...}) = 0 mmap (NULL, 46616 , PROT_READ , MAP_PRIVATE, 3 , 0 ) = 0x7f4f4d50d000 close ( 3 ) = 0 access ( " /etc/ld.so.nohwcap " , F_OK) = - 1 ENOENT (No existe tal archivo o directorio) openat (AT_FDCWD, " / lib / x86_64 -linux-gnu / libc.so.6 " , O_RDONLY | O_CLOEXEC) = 3 leer ( 3 , " \ 177ELF \ 2 \ 1 \ 1 \ 3 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 3 \ 0> \ 0 \ 1 \ 0 \ 0 \ 0 \ 260 \ 34 \ 2 \ 0 \ 0 \ 0 \ 0 \ 0 " ..., 832 ) = 832 fstat ( 3 , {st_mode = S_IFREG | 0755 , st_size = 2030544 , ...}) = 0 mmap (NULL, 8192 , PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, - 1 , 0 ) = 0x7f4f4d50b000 mmap (NULL, 4.131.552 , PROT_READ | PROT_EXEC, MAP_PRIVATE | MAP_DENYWRITE, 3 , 0 ) = 0x7f4f4cf01000 mprotect ( 0x7f4f4d0e8000 , 2097152, PROT_NONE) = 0 mmap ( 0x7f4f4d2e8000 , 24576 , PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_FIXED | MAP_DENYWRITE, 3 , 0x1e7000 ) = 0x7f4f4d2e8000 mmap ( 0x7f4f4d2ee000 , 15072 , PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_FIXED | MAP_ANONYMOUS, - 1 , 0 ) = 0x7f4f4d2ee000 close ( 3 ) = 0 arch_prctl (ARCH_SET_FS, 0x7f4f4d50c4c0 ) = 0 mprotect ( 0x7f4f4d2e8000 , 16384 , PROT_READ) = 0 mprotect ( 0x559be7d71000 , 4096 , PROT_READ) = 0 mprotect ( 0x7f4f4d519000 , 4096 , PROT_READ) = 0 munmap ( 0x7f4f4d50d000 , 46616 ) = 0 openat (AT_FDCWD, " ./file_mmap " , O_RDWR | O_CREAT, 0600 ) = 3 fstat ( 3 , {st_mode = S_IFREG | 0644 , st_size = 294 , ...}) = 0 mmap (NULL, 294 , PROT_READ | PROT_WRITE, MAP_SHARED, 3 , 0 ) =0x7f4f4d518000 close ( 3 ) = 0 munmap ( 0x7f4f4d518000 , 294 ) = 0 exit_group ( 0 ) =? +++ salió con 0 +++
Hizo una operación de modificación de archivo
#include <stdio.h> #include < string .h> #include <stdlib.h> #include <ctype.h> #include <sys / types.h> #include <sys / stat.h> #include <fcntl .h> #include <unistd.h> #include <sys / mman.h> struct Card_Messge { char number1; char number2; char number3; char number4; char number5; }; struct Card_Messge * Card; int main ( int argc, char * argv []) { int fd; char * buf; off_t len; struct stat sb; char * fname = " ./file_mmap " ; fd = abierto (fname, O_RDWR | O_CREAT, S_IRUSR | S_IWUSR); if (fd == - 1 ) { perror ( " abierto " ); retorno 1 ; } if (fstat (fd, & sb) == - 1 ) { perror ( " fstat "); retorno 1 ; } buf = mmap ( 0 , sb.st_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0 ); if (buf == MAP_FAILED) { perror ( " mmap " ); retorno 1 ; } Tarjeta = ( struct Card_Messge * ) buf; if (close (fd) == - 1 ) { perror ( " close " ); retorno 1 ; } for (len = 0 ; len <sb.st_size; ++ len) { buf [len] = toupper (buf [len]); / * putchar (buf [len]); * / } buf [ 0 ] = ' 1 ' ; buf [ 1 ] = ' 2 ' ; buf [ 2 ] = ' 3 ' ; buf [ 3 ] = ' 4 ' ; Tarjeta -> número1 = ' a ' ; Tarjeta-> número2 = ' b ' ; Tarjeta -> número3 = ' c ' ; Tarjeta -> número4 = ' d ' ; if (munmap (buf, sb.st_size) == - 1 ) { perror ( " munmap " ); retorno 1 ; } devuelve 0 ;