Linux常用API总结.docx
《Linux常用API总结.docx》由会员分享,可在线阅读,更多相关《Linux常用API总结.docx(11页珍藏版)》请在冰豆网上搜索。
Linux常用API总结
Linux常用API
1、open()
头文件:
#include
函数原型:
intopen(constchar*pathname,intflags);
intopen(constchar*pathname,intflags,mode_
tmode);
函数说明:
flags打开文件方式
mode创建文件夹的权限
返回值:
成功返回文件描述符,失败返回-1
2、close()
头文件:
#include
函数原型:
intclose(intfd);
返回值:
成功返回0,失败返回-1.
3、read()
头文件:
#include
函数原型:
size_tread(intfd,void*buf,size_tcount);
返回值:
成功返回读取的字节数,返回0则读取结束。
4、write()
头文件:
#include
函数原型:
size_twrite(intfd,constvoid*buf,size_t
count);
返回值:
成功返回写入的字节数,失败返回-1。
5、ioctl()
头文件:
#include
函数原型:
intioctl(intfd,intrequest);
函数说明:
ioctl()提供了一个用于控制设备及其描述符的和配置底层服务的接口。
返回值:
成功返回0,失败返回-1。
6、fork()
头文件:
#include
函数原型:
pid_tfork();
返回值:
成功,父进程返回子进程pid,子进程返回0,失败-1。
7、getpid()
头文件:
#include
函数原型:
pid_tgetpid();
函数说明:
获得调用进程的ID。
8、getppid()
头文件:
#include
函数原型:
pid_tgetppid();
函数说明:
获得父进程的ID。
9、exit()
头文件:
#include
函数原型:
voidexit(intstatus);
10、_exit()
头文件:
#include
函数原型:
void_exit(intstatus);
函数说明:
status返回的状态。
11、wait()和waitpid()
头文件:
#include
函数原型:
pid_twait(int*status);
pid_twaitpid(pid_tpid,int*status,intoptions);
12、exec函数族
头文件:
#include
函数原型:
intexecl(constchar*path,constchar*arg,...);
intexecv(constchar*path,char*constargv[]);
intexecle(constchar*path,constchar*arg,...,char*constenvp[]);
intexecve(constchar*path,char*constargv[],char*const
envp[]);
intexeclp(constchar*file,constchar*arg,...);
intexecvp(constchar*file,char*constargv[]);
函数说明:
(1)前4个取路径名作为参数,后两个取文件名作为参数。
(2)与参数传递有关(l表示list,v表示vector)。
execl、execlp以及execle要求将新程序的每个命令行参数(command-linearguments)都指定为一个单独的参数,以NULL指针表明参数的结束。
另外三个函数(execv、execvp和execve),首先须要建立一个指向各参数的指针数组,然后将该数组的地址作为这三个函数的参数。
(3)与向新程序传递环境变量表有关。
以e结尾的两个函数(execle和execve)可以传递一个指向环境字符串指针数组的指针。
其它四个函数则使用调用进程中的environ变量为新进程复制现有的环境。
13、kill()//发送信号
头文件:
#include
函数原型:
intkill(pid_tpid,intsig);
函数说明:
pid发送信号的目标进程
sig信号的类型
返回值:
成功0,失败-1.。
14、raise()//进程给自己发信号
头文件:
#include
函数原型:
intraise(intsig);
15、alarm()//一段时间后给自己发送SIGALRM信号
头文件:
#include
函数原型:
unsignedintalarm(unsignedintseconds);
16、signal()//信号处理
头文件:
#include
函数原型:
sighandler_tsignal(intsignum,sighandler_thandler);
17、sigaction()//POSIX标准
头文件:
#include
函数原型:
intsigaction(intsignum,conststructsigaction*act,structsigaction*oldact);
函数说明:
act表示要设置的对信号的新处理方式。
oldact表示原来对信号的处理方式。
返回值:
函数执行成功返回0,失败返回-1。
18、pipe()//普通管道
头文件:
#include
函数原型:
intpipe(intfiledes[2]);
函数说明:
写到filedes[1]的所有数据都可以从filedes[0]读回来。
19、mkfifo()//命名管道
头文件:
#include
函数原型:
intmkfifo(constchar*pathname,mode_tmode);
20、semget()(SystemV信号量)
头文件:
#include
#include
#include
函数原型:
intsemget(key_tkey,intnsems,intsemflg);
函数说明:
该函数的作用是创建一个新信号量或取得一个已有信号量的键。
参数key是一个整数值,不相关的进程可以通过它访问同一个信号量。
程序对所有信号量的访问都是间接的,它先提供一个键,再由系统生成一个相应的信号量标识符。
只有semget函数才能直接使用信号量键,所有其他的信号量函数都是使用semget函数返回的信号量标识符。
21、semop()
头文件:
#include
#include
#include
函数原型:
intsemop(intsemid,structsembuf*sops,unsignednsops);
函数说明:
该函数用于改变信号量的值。
22、semctl()
头文件:
#include
#include
#include
函数原型:
intsemctl(intsemid,intsemnum,intcmd,...);
函数说明:
该函数用来控制信号量信息。
23、shmget()
头文件:
#include
#include
函数原型:
intshmget(key_tkey,size_tsize,intshmflg);
函数说明:
与信号量一样,程序需要提供一个参数key,它有效地为共享内存命名。
shmget函数返回一个共享内存标识符,该标识符用于后续的共享内存函数。
参数size以字节为单位指定需要共享的内存容量。
参数shmflg包含9个比特的权限标志,它们的作用与创建文件时使用的mode标志一样。
24、shmat()
头文件:
#include
#include
函数原型:
void*shmat(intshmid,constvoid*shmaddr,intshmflg);
函数说明:
第一次创建共享内存段时,它不能被任何进程访问。
要想启用对该共享内存的访问,必须将其连接到一个进程的地址空间中,这项工作由shmat函数完成。
shmid是由shmget返回的共享内存标识符。
shmaddr指定共享内存连接到当前进程中的地址位置。
它通常
是一个空指针,表示让系统来选择共享内存出现的地址。
shmflg是一组位标志。
25、shmdt()
头文件:
#include
#include
函数原型:
intshmdt(constvoid*shmaddr);
函数说明:
shmdt函数的作用是将共享内存从当前进程中分离。
26、shmctl()
头文件:
#include
#include
函数原型:
intshmctl(intshmid,intcmd,structshmid_ds*buf);
函数说明:
该函数是共享内存的控制函数shmid是shmget返回的共享内存标识符。
cmd是要采取的动作,有三个取值。
27、msgget()
头文件:
#include
#include
#include
函数原型:
intmsgget(key_tkey,intmsgflg);
函数说明:
msgget函数的作用是创建和访问一个消息队列。
key用来命名某个特定的消息队列。
msgflg由9个权限标志组成。
28、msgsnd()
头文件:
#include
#include
#include
函数原型:
intmsgsnd(intmsqid,constvoid*msgp,size_tmsgsz,intmsgflg);
函数说明:
msgsnd函数用来把消息添加到消息队列中。
29、msgrcv()
头文件:
#include
#include
#include
函数原型:
ssize_tmsgrcv(intmsqid,void*msgp,size_tmsgsz,longmsgtyp,intmsgflg);
函数说明:
msgrcv函数从一个消息队列中获取消息。
30、msgctl()
头文件:
#include
#include
#include
函数原型:
intmsgctl(intmsqid,intcmd,structmsqid_ds*buf);
函数说明:
msgctl函数的作用与共享内存的控制函数非常类似。
31、pthread_create()
头文件:
include
函数原型:
intpthread_create(pthread_t*thread,constpthread_attr_t*attr,void*(*start_routine)(void*),void*arg);
函数说明:
thread指向一个pthread_t型变量,用于返回线程ID。
attr:
用于定制各种不同的线程属性,一般设为NULL。
start_routine:
新线程的工作函数。
arg:
传递给执行函数的参数。
32、pthread_self()
头文件:
#include
函数原型:
pthread_tpthread_self(void);
函数说明:
线程ID的获取方式有两种:
通过pthread_create()返回给调用者;通过pthread_self()获得其自身的ID。
33、pthread_equal()
头文件:
#include
函数原型:
intpthread_equal(pthread_tt1,pthread_tt2);
函数说明:
可以使用pthread_equal()函数检查两个线程ID是否相同
34、pthread_exit()
头文件:
#include
函数原型:
voidpthread_exit(void*value_ptr);
函数说明:
调用pthread_exit()等价于在工作函数中执行return,区别是pthread_exit()可以在工作函数调用的任何函数中被调用。
35、pthread_join()
头文件:
#include
函数原型:
intpthread_join(pthread_tthread,void**value_ptr);
返回值:
成功返回0。
36、pthread_detach()
头文件:
#include
函数原型:
intpthread_detach(pthread_tthread);
函数说明:
线程分离。
37、sem_init()(POSIX信号量)
头文件:
#include
函数原型:
intsem_init(sem_t*sem,intpshared,unsignedintvalue);
函数说明:
初始化一个未命名的信号量(unnamedsemaphore)。
sem指向需要初始化的信号量(sem_t类型)。
value指定信号量的初始值。
pshared表明信号量是在一个进程的多个线程之间共享还是在多个进程之间共享。
若pshared为0,信号量被一个进程的多个线程共享,此时应该将信号量(sem_t)置于所以线程可见的位置(全局变量或动态分配)。
38、sem_wait()
头文件:
#include
函数原型:
intsem_wait(sem_t*sem);
函数说明:
sem_wait函数以原子操作的方式将信号量的值减1,但它会等待直到信号量有个非零值才会开始减法操作。
39、sem_post()
头文件:
#include
函数原型:
intsem_post(sem_t*sem);
函数说明:
sem_post函数以原子操作的方式给信号量的值加1。
40、sem_destroy()
头文件:
#include
函数原型:
intsem_destroy(sem_t*sem);
函数说明:
sem_destroy函数的作用是用完信号量后对它进行清理,如果企图清理的信号量正被一些线程等待,就会收到一个错误。
41、互斥量
intpthread_mutex_init(pthread_mutex_t*mutex,
constpthread_mutexattr_t*attr);//初始化
intpthread_mutex_destroy(pthread_mutex_t*mutex);//销毁
intpthread_mutex_lock(pthread_mutex_t*mutex);//加锁
intpthread_mutex_trylock(pthread_mutex_t*mutex);//加锁
intpthread_mutex_unlock(pthread_mutex_t*mutex);//解锁
42、条件变量
使用条件变量前需要对它进行初始化:
intpthread_cond_init(pthread_cond_t*cond,constpthread_condattr_t*attr);
条件变量不用之后,应该用下面的函数进行销毁:
intpthread_cond_destroy(pthread_cond_t*cond);
当程序中需要等待一个条件变量时,可以用下面的函数:
intpthread_cond_timedwait(pthread_cond_t*cond,pthread_mutex_t*mutex,
conststructtimespec*abstime);
intpthread_cond_wait(pthread_cond_t*cond,pthread_mutex_t*mutex);
触发一个条件变量可以用以下函数:
intpthread_cond_broadcast(pthread_cond_t*cond);
intpthread_cond_signal(pthread_cond_t*cond);
43、socket()
头文件:
#include
#include
函数原型:
intsocket(intdomain,inttype,intprotocol);
返回值:
成功返回描述符,失败返回-1。
函数说明:
domain使用哪个底层协议
type指定服务类型
protocol具体的协议一般为0
44、bind()
头文件:
#include
#include
函数原型:
intbind(intsocked,conststructsockaddr
*my_addr,socklen_taddrlen);
返回值:
成功返回0,失败返回-1。
函数说明:
bind将my_addr所指的socket地址分配给未命名的sockfd文件描述符,addrlen指出该地址的长度。
45、listen()
头文件:
#include
#include
函数原型:
intlisten(intsocked,intbacklog);
返回值:
成功返回0,失败返回-1。
函数说明:
创建监听队列,backlog提示内核监听队列的最大长度。
46、accept()
头文件:
#include
#include
函数原型:
intaccept(intsocked,structsockaddr*addr,
socklen_t*addrlen);
返回值:
成功返回新的连接socket,失败返回0。
47、connect()
头文件:
#include
#include
函数原型:
intconnect(intsockfd,conststructsockaddr
*serv_addr,socklen_taddrlen);
返回值:
成功返回0,失败返回-1。
48、TCP数据读写
头文件:
#include
#include
函数原型:
ssize_trecv(intsockfd,void*buf,size_tlen,
intflags);
ssize_tsend(intsockfd,constvoid*buf,size_t
len,intflags);
49、UDP数据读写
头文件:
#include
#include
函数原型:
ssize_trecvfrom(intsockfd,void*buf,size_t
len,intflags,structsockaddr*src_addr,
socklen_t*addrlen);
sszie_tsendto(intsockfd,constvoid*buf,
size_tlen,intflags,conststructsockaddr
*dest_addr,socklen_taddrlen);
50、lseek()
头文件:
#include
#include
函数原型:
off_tlseek(intfildes,off_toffset,intwhence);
函数说明:
参数whence必需是以下三个常量之一:
SEEK_SET:
将文件偏移量设置在距文件开始处offset个字节。
SEEK_CUR:
将文件偏移量设置在其当前值加offset,offset可正
可负。
SEEK_END:
将文件偏移量设置为文件长度加offset,offset可正
可负。