常用C语言常识

常用C语言常识

目录

常用C语言常识... 1

1       C语言基础:... 1

1.1        #define末尾无需;1

1.2        结构体定义末尾需要;1

1.3        switch...case...1

1.4        !!的作用... 2

1.5        C语言中最常用标准库函数... 2

1.6        errno.h. 2

1.7        typedef3

1.8        字符串的拼接... 3

1.9        strcmp与strncmp. 3

1.10          在一个目录下搜索以"nvmerr_"开头的所有文件,并打开此文件... 3

1.11      pthread_create传递线程参数需要注意的问题... 4

1.12          打印线程和进程id. 5

1.13          指针空间的申请和释放... 5

1.14      C语言中对某指针变量未进行初始化和对他以NULL处理有什么区别... 5

1.15          堆和栈... 6

1.16          结构体数组的清零或者初始化... 6

1.17          结构体之间是可以直接赋值的... 6

1.18          包含结构体的结构体大小... 6

1.19      32位和64位下的sizeof()7

1.20          结构体指针... 7

1.21          结构体列举... 8

1.22      char[]数组的赋值或初始化... 8

1.23      TAILQ队列... 8

1.24      __attribute__. 8

1.25      C语言数据类型打印对应的占位符... 8

1.26          大端和小端... 8

1.26.1       什么是大端,什么是小端:8

1.26.2       为什么会有大小端:9

1.26.3       大小端在内存中的存放方式举例:9

1.26.4       如何测试编译器是大端还是小端... 9

1.27      extern关键字... 9

1.28      pthread 线程立即取消的两种方法... 10

1.29      pthread_create主线程与创建的新线程之间退出关系... 11

1.30          获取当前时间... 11

1.31      open函数错误信息获取... 12

1.32      open函数返回值判断... 12

1.33          结构体数组的初始化或置0操作... 13

2       Linux内核... 13

2.1        内核模块的编写... 13

2.2        linux:lib/modules/2.6 存放的代码跟usr/src/2.6.18存放的代码分别是什么... 14

2.3        Linux内核模块间函数调用正确方法... 14

2.4        可加载模块的gdb调试... 15

2.5        可加载模块的kgdb调试... 15

2.6        内核中的延迟... 16

2.7        snprintf函数用法... 16

2.8        内核输出printk的输出格式... 16

2.9        printk的打印级别... 16

2.10          内核常用头文件... 17

2.11          内核中的file结构... 17

2.12      struct file_operations的release()的注意事项... 18

2.13      I/O复用-每次调用select()前都要重新设置一下待检测的描述字... 18

2.14          内核环境安装等操作命令... 18

2.15      yum源... 19

2.16      PCI中bus,dev,func的取值... 20

2.17      PCI驱动程序... 20

2.18      Makefile选项... 20

2.19      Linux命令... 20

 


 

1        C语言基础:

1.1    #define末尾无需;

       #define SYSAGT_SYSIF_ERR_UE   1000

 

1.2    结构体定义末尾需要;

     struct nvme_io_channel {

             struct spdk_nvme_qpair *qpair;

             struct spdk_poller   *poller;

     };

 

1.3    switch...case...

    int value = 1;

    switch(value){

    case 1:

    case 2:

       printf("2\n");

       break;

    case 3:

    case 4:

       printf("4\n");

       break;

    上述代码的结果是:2

         case1什么也不做,直接执行下一个case的代码

        

         intvalue = 7;

   switch(value){

   case 1:

   case 2:

      printf("2\n");

      break;

   case 3:

   case 4:

      printf("4\n");

      break;

    上述代码的结果是:

         空,因为没有匹配项,所以什么也不做

 

1.4    !!作用

   !!(-2) = 1

   !!(9) = 1

   !!(0) = 0

   其实就是将所有非0的数转化为1

 

1.5    C语言中最常用标准库函数

  http://blog.csdn.net/j8121/article/details/52946980 

  

1.6    errno.h

     #define EPERM           1      /* 没有操作权限 */

          #define ENOENT          2     /* 没有这样的文件或目录 */

          #define ESRCH            3     /* 没有这样的进程 */

          #define EINTR            4      /* 系统调用被信号中断 */

          #define EIO              5      /* I/O错误 */

          #define ENXIO            6     /* 没有这样的设备或地址 */

          #define E2BIG            7      /* 参数列表太长了 */

          #define ENOEXEC         8     /* 执行文件格式错误 */

          #define EBADF            9     /* 文件号错误 */

          #define ECHILD          10     /* 没有子进程 */

          #define EAGAIN           11     /*稍后再试 Try again */

          #define ENOMEM         12    /* 内存溢出 */

          #define EACCES           13     /* 文件权限不允许Permissiondenied */

          #define EFAULT           14     /*非法地址 Bad address */

          #define ENOTBLK         15     /* Block device required */

          #define EBUSY          16     /*设备或者资源已经被使用 Device or resource busy

          #define EEXIST           17     /* 文件已存在 File exists */

          #define EXDEV           18     /* Cross-device link */

          #define ENODEV         19     /*没有这样的设备 No such device */

          #define ENOTDIR         20    /* 不是一个目录 Not a directory */

          #define EISDIR           21     /* 是一个目录Is a directory*/

          #define EINVAL          22      /*无效参数 Invalid argument */

          #define ENFILE          23      /* 文件个数超出 File tableoverflow */

          #define EMFILE         24     /* 打开的文件数超过设定值 Too many open files /

          #define ENOTTY        25       /* Not a typewriter */

          #define ETXTBSY        26      /* Text file busy */

          #define EFBIG          27      /* File too large */

          #define ENOSPC        28      /* No space left on device */

          #define ESPIPE         29      /* Illegal seek */

          #define EROFS         30      /* Read-only file system */

          #define EMLINK        31      /* Too many links */

   #define EPIPE          32      /* Broken pipe */

          #define EDOM         33      /* Math argument out of domain of func */

         #defineERANGE         34       /* Math result not representable */ 

 

1.7    typedef

typedef作用是为一个数据类型定义一个新名字,包括int,char和自定义的类型。与#define的不同在于typedef在编译时被解释。

  如:typedef  unsigned char      uint8_t;

  当typedef作用于结构体时,如:

 typedef struct Student

  {

   ...

 }Stu;

  用的时候直接Stustu1(这里Stu相当于struct Student,所有struct Student都可以直接用Stu代替)

 

1.8    字符串的拼接

  char *filename = (char*)malloc(sizeof(char) * 32);

  char *name ="string";

  char num = "20";

  char *suffix =".bin"

  strcpy(filename, name);

  strcat(filename, num);

  strcat(filename, suffix)

  这样就可以拼接成:string20.bin

 

1.9    strcmp与strncmp

  strcmp与strncmp都是用来比较字符串的,区别在于能否比较指定长度字符串。

  int strcmp (const char *s1,const char *s2)

  //这个函数用来比较s1和s2字符串,两个字符串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇’\0’为止。

  //若str1==str2,则返回零;str1> str2,则返回正数;若str1< str2,则返回负数。 

  int strncmp (const char *s1,const char *s2, size_t size)

  //strncmp函数是指定比较size个字符。也就是说,如果字符串s1与s2的前size个字符相同,函数返回值为0。

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值