linux C 调用系统接口卸载模块 范例

代码
#include  < stdio.h >
#include 
< stdlib.h >
# include 
< sys / syscall.h >      //  syscall() , __NR_init_module
#include  < sys / stat.h >
#include 
< errno.h >                 //  ENOEXEC

#include 
< fcntl.h >          //  O_RDONLY 
#include  < sys / mman.h >      //  PROT_READ , MAP_PRIVATE , MAP_FAILED

# define init_module(mod, len, opts) syscall(__NR_init_module, mod, len, opts)
# define delete_module(mod, flags) syscall(__NR_delete_module, mod, flags)

#define  MPI_NAME "ct_def"     //

void  moderror( int  err)
{
    
switch  (err) {
    
case   - 1 /*  btw: it's -EPERM  */
        printf(
" no such module " );
        
return ;
    
case  ENOEXEC:
        printf( 
" invalid module format " );
        
return ;
    
case  ENOENT:
        printf( 
" unknown symbol in module, or unknown parameter " );
        
return ;
    
case  ESRCH:
        printf(
" module has wrong symbol version " );
        
return  ;
    
case  ENOSYS:
        printf(
" kernel does not support requested operation " );
        
return  ;
    
default  :
        printf(
" unknown errcode(%d) " ,err);
        
return  ;
    }
}

 

 



int  main( void  )
{
    unsigned flags 
=  O_NONBLOCK  |  O_EXCL;
    
int  ret;

    errno
= 0 ;
    ret
= delete_module(MPI_NAME, flags);
           
if  (ret  !=   0 ) { 
        printf(
" cannot rmmod  :  " );
        moderror(errno);
        printf(
" \n  " );
    }
    printf(
" removed\n " );
    
return   0 ;
}

 

错误的码的定义在Linux/include/asm-generic/errno-base.h 文件中

 

 


 

你可能感兴趣的:(linux)