Thursday, May 19, 2011

C++项目中的extern "C" {}


引言

在用C++的项目源码中,经常会不可避免的会看到下面的代码:
1#ifdef __cplusplus
2extern "C" {
3#endif
4
5/*...*/
6
7#ifdef __cplusplus
8}
9#endif
它到底有什么用呢,你知道吗?而且这样的问题经常会出现在面试or笔试中。下面我就从以下几个方面来介绍它:
  • 1、#ifdef _cplusplus/#endif _cplusplus及发散
  • 2、extern "C"
    • 2.1、extern关键字
    • 2.2、"C"
    • 2.3、小结extern "C"
  • 3、C和C++互相调用
    • 3.1、C++的编译和连接
    • 3.2、C的编译和连接
    • 3.3、C++中调用C的代码
    • 3.4、C中调用C++的代码
  • 4、C和C++混合调用特别之处函数指针

Tuesday, May 17, 2011

Linux内核增加系统调用 转载

1.linux 系统调用的基本原理
   linux的系统调用形式与POSIX兼容,也是一套C语言函数名的集合。然而,linux系统调用的内部实现方式却与DOC的INT 21H相似,它是经过INT 0X80H软中断进入后,再根据系统调用号分门别类地服务。
从系统分析的角度,linux的系统调用涉及4个方面的问题。
(1)与系统调用有关的数据结构和函数
   函数名以“sys_”开头,后跟该系统调用的名字。例如,系统调用fork()的响应函数是sys_fork()(见kernel/fork.c),exit()的响应函数是sys_exit()(见kernel/fork.c)。