• apue 20130318


    Apue函数(linux系统调用(linux api)

    5分钟

    函数名:功能 不需要记参数

    Int main()

    {

    例如没有复杂算法

    Open();         ->opendir();

    Read();复杂     ->{

    Printf(); readdir();

    Close();    } closedir();

    }

    函数实现 内核源代码   低版本

    国外操作系统原理      操作系统原理   

    Fgets(输入);

    Fputs(输出)  const

     

    栈:结束完释放     指针 -> 函数

     

    为什么要使用函数

    函数:重复使用同一段代码~  c++继承

     

    自定义函数:

    1,函数声明   void fun(void);    

    2,函数调用   fun();

    3,函数的定义(实现):void fun(void)  {

    Printf ();}

    被调   ->  主调

     

    函数多了  ->

    声明多了  ->头文件.h

    函数库   1, gcc -c a.c

    2,ar -rs libxxx.a  a.o b.o c.o

    动态库   1, gcc -c -fpic  a.c  ->a.o

    2,gcc -shared  -fpic  -o libxxx.so  a.o b.o

    分模块

    Main.c  a.h a.c b.h b.c  makefile自动生成

    代码一般在140行出错   分文件  

    自定义函数:自己实现某个功能

    函数声明

    数据类型  函数名<形参列表>

    数据类型;返回值类型 没有void  是否成功   linux  默认int

    函数名:地址常量

    参数列表:  没有void int 多个:,分割

     

    调用

    函数名  (实际参数(表达式));先计算再传值

     

    实现:

    数据类型  函数名(形参列表名字)

    {

    函数功能;           思路

    }

     

    编写一个函数,找两个数的最大值

    输入:     

    输出:

    返回值:

     

    功能

    名字

    输入

    输出

    作者

    日期

    版本

     

    输入:两个数

    输出:一个数

    返回值:一个数

     

    测试

     

    声明:int fun(int,int)

    实现: int fun(int a,int b)   有什么区别

     

    执行(表达式)计算  传

    过程  栈   x=10

    Y=20     寄存器

    回收空间  a=10

    B=20        return 数据寄存器

    20

     

    Pthread_create();同时执行

    Fork();  两份

     

    执行过程:计算 栈空间  运算  结束  回收空间

     

    写简单的东西   

    #include N 100  'N'  "N"  替换不了

    #define N(a)   a+3

    Int b=N(10)  13  相当于函数名

       Int b =10 + 3;

    带参数的宏  编译时

    函数:执行时

     

    优  简单替换 节约时间

    缺  没有类型

     

    带参数的宏

    2 inline  内联函数

     

    函数声明时加inline

    内联函数  :编译时向编译器提出申请

    Inline  int  fun(int a,int b);   展开  不一定

    原则:不能出现循环   用时没有循环

    有时当作函数   很有用

     

    反汇编:objdump   call

     

    总结:把以前的所有数据类型都通过参数传递给函数

    实参与形参没有影响

     

    Void fun1(int a,int b);

    Void fun2(char ch,char cc);

    Void fun3(int arr[],int len);

    起始地址  开始  多少个数据有效

    Int i;for (i-0;i<sizeof(arr);i++)

    Arr[i];   len   形式

    Void  fun4(int *arr, int len);   等价

    Void fun5(char *buf);  '\0'   字符串

    Char a[]="abcd";   5

    Fun5(a);

    Fun5("abcd");  

    Open("a.c");   字符串

    Fun5(argv[0]);   

    指针数组   char *p[5]={buf1,buf2,buf3,buf4,buf5};

    通过函数交换两个变量的值

     

    {

    Int a=10;

    Int b=20;

    Printf ("");

    Fun();

    Printf ("");

    }

     

    Void  fun6(char *a,  char *b)

    {

    Int tmp;

    Tmp=*a;

    *a=*b;

    *b=tmp;

    }

    地址占4个字节

     

    两瓶水两瓶油

    地址与地址       没有区别

     

     

    Char *p ="abcd";

    Char *q="1234";

    Printf ("p=%s q=%s\n",p,q);

    Fun();

    Printf ("p=%s q=%s\n",p,q);

     

    常量   ->   文本段   数据空间

    保存指针的地址    二级指针

     

    必会

    文件函数  open()  read()  write()  lseek()  close()

    所有设备

    了解  fcntl(); ioctl();

    记住;dup()  dup2()

     

     

  • 相关阅读:
    android笔记5——同一个Activity中Fragment的切换
    JavaScript 刚開始学习的人应知的 24 条最佳实践
    位运算符之异或的化腐朽为奇妙
    unity常见问题之20题
    汉澳sinox不受openssl心血漏洞影响并分析修复其漏洞代码
    基于canvas和Web Audio的音频播放器
    poj2595(凸包)
    HDU 1257 最少拦截系统(dp)
    【iOS开发-33】学习手动内存管理临时抛弃ARC以及retain/assign知识——iOSproject师面试必考内容
    万能狗! 程序猿屌丝独自创业之路(一)
  • 原文地址:https://www.cnblogs.com/wangjingyuwhy/p/2966878.html
Copyright © 2020-2023  润新知