La fonction mmap est très importante, alsa pilote uac uvc audio et vidéo et toute cette application devient un processus, cette fonction joue également un rôle clé.
root @ instance-tau7o2q5: ~ / app_modules # strace ./a. dehors . execve ( " ./a.out " , [ " ./a.out " , " . " ], 0x7ffc78e587b8 / * 27 vars * / ) = 0 brk (NULL) = 0x559be8915000 accès ( " /etc/ld.so. nohwcap " , F_OK) = - 1 ENOENT (aucun fichier ou répertoire de ce type) accès ( " /etc/ld.so.preload " , R_OK) = - 1 ENOENT (aucun fichier ou répertoire de ce type) 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 accès ( " /etc/ld.so.nohwcap " , F_OK) = - 1 ENOENT (Aucun fichier ou répertoire de ce type) openat (AT_FDCWD, " / lib / x86_64-linux-gnu / libc.so.6 " , O_RDONLY | O_CLOEXEC) = 3 lire ( 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 ) =? +++ sorti avec 0 +++
A effectué une opération de modification de fichier
#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 = ouvert (fname, O_RDWR | O_CREAT, S_IRUSR | S_IWUSR); if (fd == - 1 ) { perror ( " open " ); retour 1 ; } if (fstat (fd, & sb) == - 1 ) { perror ( " fstat "); retour 1 ; } buf = mmap ( 0 , sb.st_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0 ); if (buf == MAP_FAILED) { perror ( " mmap " ); retour 1 ; } Card = ( struct Card_Messge * ) buf; if (close (fd) == - 1 ) { perror ( " close " ); retour 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 ' ; Carte -> numéro1 = ' a ' ; Carte-> nombre2 = ' b ' ; Carte -> numéro3 = ' c ' ; Carte -> numéro4 = ' d ' ; if (munmap (buf, sb.st_size) == - 1 ) { perror ( " munmap " ); retour 1 ; } return 0 ;