Messages in this thread | | | From | (Jan Willamowius) | Subject | Re: How to write kernel modules using C++ | Date | Sat, 29 May 1999 01:44:55 +0200 (MET DST) |
| |
I think using C++ in modules is of quite limited use, but in some cases it makes sense to snippets of existing code.
Since man people seem to be thinking about using C++ in modules, here is my example, if you really need to do so. Comments welcome.
- Jan
--- cpp_mod.cpp ---
extern "C" { #include <linux/types.h> #include <linux/module.h> #include <linux/kernel.h> }
/* can't include <linux/vmalloc.h>, because it in turn includes */ /* <linux/list.h> which uses C++ keywords a variable names */ extern "C" void * vmalloc(unsigned long size); extern "C" void vfree(void * addr); // extern "C" int atexit(void (*function)(void));
/* include this explicitely: g++ might optimize instance in module.h away !*/ static char kernel_version[] = UTS_RELEASE;
MODULE_AUTHOR("Jan Willamowius"); MODULE_DESCRIPTION("Demo for C++ usage in modules"); MODULE_PARM(param1, "i");
static int param1 = 0;
void * operator new(size_t amt) { void * pReturn = NULL; pReturn = vmalloc(amt); printk("NEW: size = %d returns 0x%p\n", amt, pReturn); return pReturn; }
void operator delete( void *p ) { printk("FREE: ptr = 0x%p\n", p); vfree(p); }
/* int atexit(void (*function)(void)) { printk("ATEXIT\n"); return 0; }; */
class Myclass { public: int c; void printit();
Myclass(); ~Myclass(); };
Myclass::Myclass() { c = 1; printk("*******CONSTRUCTOR %d\n", c ); }
Myclass::~Myclass() { }
void Myclass::printit() { printk("******* PRINTIT %d\n", c ); }
int init_module() { // static Myclass mc; // mc.printit(); Myclass * mc = new Myclass; mc->printit(); delete mc; return 0; }
void cleanup_module() { }
-- Jan Willamowius, http://www.willamowius.de/ Microsoft has a year 2000 problem. I'm part of it. I'm running Linux.
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.rutgers.edu Please read the FAQ at http://www.tux.org/lkml/
| |