混乱的函数

来源:互联网 发布:数据化人生奇书 编辑:程序博客网 时间:2024/05/16 04:44

 

1.字符操作函数是否以NULL结束.

一定以null结束缓冲区的函数:

fgets, snprintf, 

不一定null结束缓冲区的函数:

strncpy, memcpy, readlink

 

特别:

fgets尝试保持换行符,除非换行符的位置>=缓冲区大小.

snprintf返回值为字符串大小,可能比缓冲区大,这表示字符串已被截断.

strncpy和memcpy的size_t表明的是应该从src复制多少字节,不过和普通的也没多大差别.

--------------------

 

2.io函数参数中文件的标识符的位置

系统调用read, write等统一把文件描述符作为第一个参数;

ISO C函数中,格式化输出转换函数族(即fprintf, vfprintf等)把文件流指针(FILE*)作为

第一个参数,除此之外,其他函数都把流指针作为最后一个参数,如fread, fwrite, fgets.

-------------------

 

3.io函数参数中的缓冲区大小和缓冲区指针及缓冲区个数

系统调用缓冲区指针放在三者的最前面,紧跟缓冲区大小,例如read,如果有指定缓冲区个

数,则放置在最后,例如readv,不过此时缓冲区用一个结构体表示,里面包含指针和大小.

ISO C函数大致和系统调用一样,但未发现有参数指定缓冲区个数.

-------------------

 

4.read/write和fread/write的其他区别

后者可用于结构化输入输出,所以size参数指定每个结构的大小,而多一个nmemb指定传输

结构的个数,而前者只指定一个缓冲区大小;

read遇到EOF时返回0,而fread返回出错,所以要使用feof或ferror支判断到底是否出错.

-------------------

 

5.参数中src和dst的位置

memcpy, strncpy, snprintf等ISO C函数都把dst性质的参数放在src性质的参数之前,不

明白这种安排的原因.

而除去ISO C之外,其他库函数和系统调用,如inet_ntop, symlink, dup2等都依照from src to dst的顺序放置.

 

特别:

symlink有些拗口,从src创建一个目标连接dst.

dup2的src是oldfd,dst是newfd,表示关联oldfd表示的文件到newfd.

-------------------