zoukankan      html  css  js  c++  java
  • C/C++函数使用

    1 memset

    将s所指向的某一块内存中的前n个 字节的内容全部设置为ch指定的ASCII值, 块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作, 其返回值为指向s的指针。

    函数介绍

    void *memset(void *s, int ch, size_t n);

    函数解释:将s中前n个字节 (typedef unsigned int size_t )用 ch 替换并返回 s 。

    memset:作用是在一段内存块中填充某个给定的值,它是对较大的结构体或数组进行清零操作的一种最快方法[1] 。

    2 bzero
    置字节字符串前n个字节为零且包括‘’。
    原型:extern void bzero(void *s, int n);
    参数说明:s 要置零的数据的起始地址; n 要置零的数据字节个数。
    用法:#include <string.h>
    功能:置字节字符串s的前n个字节为零且包括‘’。
    说明:bzero无返回值,并且使用string.h头文件,string.h曾经是posix标准的一部分,但是在POSIX.1-2001标准里面,这些函数被标记为了遗留函数而不推荐使用。在POSIX.1-2008标准里已经没有这些函数了。推荐使用memset替代bzero。

    3 tcflush
    Unix终端I/O函数。作用:清空终端未完成的输入/输出请求及数据。

    4 tcgetattr

    tcgetattr函数用于获取与终端相关的参数。参数fd为终端的文件描述符,返回的结果保存在termios 结构体中,该结构体一般包括如下的成员:
    tcflag_t c_iflag;
    tcflag_t c_oflag;
    tcflag_t c_cflag;
    tcflag_t c_lflag;
    cc_t c_cc[NCCS];

      返回值
    成功返回零;失败返回非零,发生失败接口将设置errno错误标识。

    5 cfsetispeed和cfsetospeed

    设置输入输出波特率

    6 tcsetattr
    tcsetattr函数用于设置终端参数。函数在成功的时候返回0,失败的时候返回-1,并设置errno的值。参数fd为打开的终端文件描述符,参数optional_actions用于控制修改起作用的时间,而结构体termios_p中保存了要修改的参数。optional_actions可以取如下的值。
    TCSANOW:不等数据传输完毕就立即改变属性。
    TCSADRAIN:等待所有数据传输结束才改变属性。
    TCSAFLUSH:清空输入输出缓冲区才改变属性。
    错误信息:
    EBADF:非法的文件描述符。
    EINTR:tcsetattr函数调用被信号中断。
    EINVAL:参数optional_actions使用了非法值,或参数termios中使用了非法值。
    ENCTTY:非终端的文件描述符。

    7 memcpy
    c和c++使用的内存拷贝函数,
    memcpy函数的功能是从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中。
    函数原型
    void *memcpy(void *dest, const void *src, size_t n);

    8 usleep

    usleep函数能把进程挂起一段时间, 单位是微秒(千分之一毫秒)。

    头文件: unistd.h
    语法: void usleep(int micro_seconds);
    返回值: 无
    内容说明:本函数可暂时使程序停止执行。参数 micro_seconds 为要暂停的微秒数(us)。

    9 malloc
    malloc的全称是memory allocation,中文叫动态内存分配,当无法知道内存具体位置的时候,
    想要绑定真正的内存空间,就需要用到动态的分配内存。
    原型为extern void *malloc(unsigned int num_bytes)。

    原型
    extern void *malloc(unsigned int num_bytes);
    头文件

    在TC2.0中可以用malloc.h或 alloc.h (注意:alloc.h 与 malloc.h 的内容是完全一致的),而在Visual C++6.0中可以用malloc.h或者stdlib.h。
    功能

    分配长度为num_bytes字节的内存块
    返回值

    如果分配成功则返回指向被分配内存的指针(此存储区中的初始值不确定),否则返回空指针NULL。当内存不再使用时,应使用free()函数将内存块释放。函数返回的指针一定要适当对齐,使其可以用于任何数据对象。
    说明

    关于该函数的原型,在以前malloc返回的是char型指针,新的ANSIC标准规定,该函数返回为void型指针,因此必要时要进行类型转换。

    10 读函数read  
    ssize_t read(int fd,void *buf,size_t nbyte) 
    read函数是负责从fd中读取内容.成功时,read返回实际所读的字节数,如果返回的值是0,表示已经读到文件的结束了.
    小于0表示出现了错误.如果错误为EINTR说明读是由中断引起的, 如果是ECONNREST表示网络连接出了问题.

    返回-1的时候,要根据错误码来判断原因,请看下面的函数说明:

    表头文件 #include<unistd.h> 定义函数 ssize_t read(int fd,void * buf ,size_t count); 函数说明 read()会把参数fd 所指的文件传送count个字节到buf指针所指的内存中。若参数count为0,则read()不会有作用并返回0。返回值为实际读取到的字节数,如果返回0,表示已到达文件尾或是无可读取的数据,此外文件读写位置会随读取到的字节移动。 附加说明 如果顺利read()会返回实际读到的字节数,最好能将返回值与参数count 作比较,若返回的字节数比要求读取的字节数少,则有可能读到了文件尾、从管道(pipe)或终端机读取,或者是read()被信号中断了读取动作。当有错误发生时则返回-1,错误代码存入errno中,而文件读写位置则无法预期。 错误代码 EINTR 此调用被信号所中断。 EAGAIN 当使用不可阻断I/O 时(O_NONBLOCK),若无数据可读取则返回此值。 EBADF 参数fd 非有效的文件描述词,或该文件已关闭。

     
     
     
    11 写函数write  
    ssize_t write(int fd,const void *buf,size_t nbytes) 
    write函数将buf中的nbytes字节内容写入文件描述符fd.成功时返回写的字节数.失败时返回-1. 并设置errno变量. 在网络程序中,当我们向套接字文件描述符写时有俩种可能.  
    1)write的返回值大于0,表示写了部分或者是全部的数据.  
    2)返回的值小于0,此时出现了错误.我们要根据错误类型来处理.  如果错误为EINTR表示在写的时候出现了中断错误.  
    如果为EPIPE表示网络连接出现了问题(对方已经关闭了连接).
     
    12 close()函数:关闭文件

    头文件:#include <unistd.h>

    定义函数:int close(int fd);

    函数说明:当使用完文件后若已不再需要则可使用 close()关闭该文件, 二close()会让数据写回磁盘, 并释放该文件所占用的资源. 参数fd 为先前由open()或creat()所返回的文件描述词.

    返回值:若文件顺利关闭则返回0, 发生错误时返回-1.

    错误代码:EBADF 参数fd 非有效的文件描述词或该文件已关闭.

    附加说明:虽然在进程结束时, 系统会自动关闭已打开的文件, 但仍建议自行关闭文件, 并确实检查返回值.

    sprintf

    字符串格式化命令,主要功能是把格式化的数据写入某个字符串中。 原型 int sprintf( char *buffer, const char *format, [ argument] … );

    参数列表

    buffer:char型指针,指向将要写入的字符串的缓冲区。 format:格式化字符串。 [argument]...:可选参数,可以是任何类型的数据。 返回值:字符串长度(strlen)

    sscanf

    sscanf() - 从一个字符串中读进与指定格式相符的数据。
    swscanf()- 用于处理宽字符字符串,和sscanf功能相同。

    函数原型:
    int sscanf( const char *, const char *, ...);
    int sscanf(const char *buffer,const char *format,[argument ]...);
    buffer存储的数据
    format格式控制字符串
    argument 选择性设定字符串
    sscanf会从buffer里读进数据,依照format的格式将数据写入到argument里。
     

    头文件 #include<stdio.h>

    sscanf与scanf类似,都是用于输入的,只是后者以键盘(stdin)为输入源,前者以固定字符串为输入源。

     1     // 发送升级固件的命令
     2     unsigned char Cmd[256];  // 实际用到135字节
     3     memset(Cmd,0x00,sizeof(Cmd));
     4 
     5     // 高位的crc
     6     char *chrMSB = (char*) malloc(2 * sizeof(char));
     7     memset(chrMSB, 0x00, sizeof(2 * sizeof(char)));
     8 
    
    1             // 求得高位CRC
    2             chrMSB = substring(chrCRCCheckSum,0,2);   //chrMSB的值是比如是6D
    3             char chrConverMSB;
    4             sscanf(chrMSB, "%x", &chrConverMSB);
    5             Cmd[134] = chrConverMSB;
    6             LOGI("=================>[高位CRC] Cmd[134] :%x",chrConverMSB);
  • 相关阅读:
    typedef的用法
    重定向在网络编程中的理解
    简答的理解C语言中的各种类型函数
    栈、堆、静态存储区
    标识符起作用范围----作用域、连接类型、存储期
    main函数的argc和argv
    基本数据类型
    数组与指针
    第一章 CLR的执行模型
    Revit 二次开发 沿弧形路径创建拉伸屋顶
  • 原文地址:https://www.cnblogs.com/YangBinChina/p/3985383.html
Copyright © 2011-2022 走看看