小知识杂记:
注记: 定义变量时一定要进行初始化,尤其是数组和结构体这种占用内存大的数据结构。在使用数组的时候经常因为没有初始化而产生“烫烫烫烫烫烫”这样的野值,俗称“乱码”。
memset()函数:
函数定义:
# include <string.h>
void *memset(void *s, int c, unsigned long n);
函数说明:memset 函数是内存赋值函数,用来给某一块内存空间进行赋值的;
包含在<string.h>头文件中,可以用它对一片内存空间逐字节进行初始化;
函数参数:
s可以是数组名,也可以是指向某一内在空间的指针;
v为要填充的值;
n为要填充的字节数;
write()函数:
函数定义:ssize_t write (int fd, const void * buf, size_t count);
函数说明:write()会把参数buf所指的内存写入count个字节到参数fd所指的文件内。
返回值:如果顺利write()会返回实际写入的字节数(len)。当有错误发生时则返回-1,错误代码存入errno中。
read()函数
函数定义:ssize_t read(int fd, void * buf, size_t count);
函数说明:read()会把参数fd所指的文件传送count 个字节到buf 指针所指的内存中。
返回值:返回值为实际读取到的字节数, 如果返回0, 表示已到达文件尾或是无可读取的数据。若参数count 为0, 则read()不会有作用并返回0。
> 0: 实际读到的字节数
= 0: 读完数据(读文件, 管道, socket末尾–>对端关闭, 对端未关闭会一直等待)
-1: 异常:
errno == EINTR被信号中断, 重启或者退出
errno == EAGAIN或者EWOULDBLOCK以非阻塞方式读, 并且没有数据
其他值: 出现错误perror eixt