linux主要API的实现细节

发布时间:2010-12-21 22:37:16   来源:文档文库   
字号:

linux主要API的实现细节

1内存控制篇

calloc(配置内存空间)
相关函数 mallocfreereallocbrk
表头文件 #include
定义函数 void *calloc(size_t nmembsize_t size);
函数说明 calloc()用来配置nmemb个相邻的内存单位,每一单位的大小为size,并返回指向第一个元素的指针。这和使用下列的方式效果相同:malloc(nmemb*size);不过,在利用calloc()配置内存时会将内存内容初始化为0
返回值 若配置成功则返回一指针,失败则返回NULL

范例:

/* 动态配置10struct test 空间*/
#include
struct test
{
int a[10];
char b[20];
}
main()
{
struct test *ptr=calloc(sizeof(struct test),10);
}

2文件操作篇

close(关闭文件)
相关函数 openfcntlshutdownunlinkfclose
表头文件 #include
定义函数 int close(int fd);
函数说明 当使用完文件后若已不再需要则可使用close()关闭该文件,二
close()会让数据写回磁盘,并释放该文件所占用的资源。参数fd
先前由open()creat()所返回的文件描述词。
返回值 若文件顺利关闭则返回0,发生错误时返回-1
错误代码 EBADF 参数fd 非有效的文件描述词或该文件已关闭。
附加说明 虽然在进程结束时,系统会自动关闭已打开的文件,但仍建议自行
关闭文件,并确实检查返回值。

creat(建立文件)
相关函数 readwritefcntlcloselinkstatumaskunlinkfopen
表头文件 #include
#include
#include
定义函数 int creat(const char * pathname, mode_tmode);
函数说明 参数pathname指向欲建立的文件路径字符串。Creat()相当于使用下
列的调用方式调用open()
open(const char * pathname ,(O_CREAT|O_WRONLY|O_TRUNC));
错误代码 关于参数mode请参考open()函数。
返回值 creat()会返回新的文件描述词,若有错误发生则会返回-1,并把错
误代码设给errno
EEXIST 参数pathname所指的文件已存在。
EACCESS 参数pathname 所指定的文件不符合所要求测试的权限
EROFS 欲打开写入权限的文件存在于只读文件系统内
EFAULT 参数pathname 指针超出可存取的内存空间
EINVAL 参数mode 不正确。
ENAMETOOLONG 参数pathname太长。
ENOTDIR 参数pathname为一目录
ENOMEM 核心内存不足
ELOOP 参数pathname有过多符号连接问题。
EMFILE 已达到进程可同时打开的文件数上限
ENFILE 已达到系统可同时打开的文件数上限
附加说明 creat()无法建立特别的装置文件,如果需要请使用mknod()


                                Linhan 2005 ShenZhen

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

write(将数据写入已打开的文件内)
相关函数 openreadfcntlcloselseeksyncfsyncfwrite
表头文件 #include
定义函数 ssize_t write (int fd,const void * buf,size_t count);
函数说明 write()会把参数buf所指的内存写入count个字节到参数fd所指的文
件内。当然,文件读写位置也会随之移动。
返回值 如果顺利write()会返回实际写入的字节数。当有错误发生时则返
-1,错误代码存入errno中。
错误代码 EINTR 此调用被信号所中断。
EAGAIN 当使用不可阻断I/O 时(O_NONBLOCK),若无数据可读取则
返回此值。
EADF 参数fd非有效的文件描述词,或该文件已关闭。

3信号处理片


                                Linhan 2005 ShenZhen

本文来源:https://www.2haoxitong.net/k/doc/9c8a942c7375a417866f8fb8.html

《linux主要API的实现细节.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式