代码
#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 ;
}
}
#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 文件中