zoukankan      html  css  js  c++  java
  • linux C 学习中的一些小笔记,不断更新

    都是一些零散的东西,没有连贯性。


    知识一.

     printf也有返回值,表示实际打印的字符数。

    知识二.

     系统头文件通常位于/usr/include目录下。

    知识三.

     使用math.h中声明的库函数有一点特殊之处,gcc命令行必须加-lm选项,因为数学函数位于libm.so库文件中(这些库文件通常位于/lib目录下),-lm选项告诉编译器,我们程序中用到的数学函数要到这个库文件里找。

    知识四.

    系统调用的返回码

    全局变量errno  (linux下一般负值表示错误,正值表示成功)

    perror(string)

    strerror(errno)

    知识五.

     fprintf(格式化输出数据至文件)
    相关函数 printf,fscanf,vfprintf
    表头文件 #include<stdio.h>
    定义函数 int fprintf(FILE * stream, const char * format,.......);
    函数说明 fprintf()会根据参数format字符串来转换并格式化数据,然后将结果输出到参数stream指定的文件中,直到出现字符串结束('\0')为止。
    返回值关于参数format字符串的格式请参考printf()。成功则返回实际输出的字符数,失败则返回-1,错误原因存于errno中。

    范例:

    #include<stdio.h>
    main()
    {
    int i = 150;
    int j = -100;
    double k = 3.14159;
    fprintf(stdout,”%d %f %x \n”,j,k,i);
    fprintf(stdout,”%2d %*d\n”,i,2,i);
    }


    执行 -100 3.141590 96
    150 150

    知识六.

     关于socket的阻塞与非阻塞模式以及它们之间的优缺点,这已经没什么可言的;打个很简单的比方,如果你调用socket send函数时;

    如果是阻塞模式下:

    send先比较待发送数据的长度len和套接字s的发送缓冲的长度,如果len大于s的发送缓冲区的长度,该函数返回SOCKET_ERROR;如果len小于或者等于s的发送缓冲区的长度,那么send先检查协议是否正在发送s的发送缓冲中的数据,如果是就等待协议把数据发送完,如果协议还没有开始发送s的发送缓冲中的数据或者s的发送缓冲中没有数据,那么 send就比较s的发送缓冲区的剩余空间和len,如果len大于剩余空间大小,send就一直等待协议把s的发送缓冲中的数据发送完,如果len小于剩余空间大小send就仅仅把buf中的数据copy到剩余空间里

    如果是非阻塞模式下:

    在调用socket send函数时,如果能写到socket缓冲区时,就写数据并返回实际写的字节数目,当然这个返回的实际值可能比你所要写的数据长度要小些(On nonblocking stream oriented sockets,the number of bytes written can be between 1 and the requested length,depending on buffer availability on both the client and server computers),如果不可写的话,就直接返回SOCKET_ERROR了,所以没有等待的过程。


    知识七.

    系统中默认的常用文件扩展名及其含义为:
      .o
      目标文件
      .c
      C源文件
      .f
      FORTRAN源文件
      .s
      汇编源文件
      .y
      Yacc-C源语法
      .l
      Lex源语法

      在早期的Unix系统系统中还支持Yacc-C源语法和Lex源语法。在编译过程中,系统会首先在makefile文件中寻找与目标文件相关的.C文件,如果还有与之相依赖的.y和.l文件,则首先将其转换为.c文件后再编译生成相应的.o文件;如果没有与目标相关的.c文件而只有相关的.y文件,则系统将直接编译.y文件。


  • 相关阅读:
    我的物联网项目(七)前期线上事故
    我的物联网项目(六)推广策略
    我的物联网项目(五)下单渠道
    我的物联网项目(四)订单系统
    我的物联网项目(三)平台架构
    我的物联网项目(二)初建团队
    我的物联网项目(一)开端
    從需求分析開始
    提升GDI画图的效率
    C#写COM组件,JS调用控件
  • 原文地址:https://www.cnblogs.com/fengty90/p/3768880.html
Copyright © 2011-2022 走看看