Linux常用API
1、open() 头文件:#include 函数原型:int open(const char *pathname, int flags); int open(const char *pathname, int flags, mode_
t mode); 函数说明:flags打开文件方式
mode创建文件夹的权限
返回值:成功返回文件描述符,失败返回-1
2、close() 头文件:#include 函数原型:int close(int fd); 返回值:成功返回0,失败返回-1.
3、read() 头文件:#include 函数原型:size_t read(int fd, void *buf, size_t count); 返回值:成功返回读取的字节数,返回0则读取结束。
4、write() 头文件:#include 函数原型:size_t write(int fd, const void *buf, size_t
count); 返回值:成功返回写入的字节数,失败返回-1。
5、ioctl() 头文件:#include 函数原型:int ioctl(int fd, int request); 函数说明:ioctl()提供了一个用于控制设备及其描述符的和配置底层服务的接口。
返回值:成功返回0,失败返回-1。
6、fork() 头文件:#include 函数原型:pid_t fork(); 返回值:成功,父进程返回子进程pid,子进程返回0,失败-1。
7、getpid() 头文件:#include 函数原型:pid_t getpid(); 函数说明:获得调用进程的ID。
8、getppid() 头文件:#include 函数原型:pid_t getppid(); 函数说明:获得父进程的ID。
9、exit() 头文件:#include 函数原型:void exit(int status);
10、_exit() 头文件:#include 函数原型:void _exit(int status); 函数说明:status 返回的状态。
11、wait()和waitpid() 头文件:#include 函数原型:pid_t wait(int *status); pid_t waitpid(pid_t pid, int *status, int
options);
12、exec函数族
头文件:#include 函数原型:
int execl(const char *path, const char *arg, ...); int execv(const char *path, char *const argv[]); int execle(const char *path, const char *arg, ..., char
*const envp[]); int execve(const char *path, char *const argv[], char *const
envp[]); int execlp(const char *file, const char *arg, ...); int execvp(const char *file, char *const argv[]); 函数说明:
(1)前4个取路径名作为参数,后两个取文件名作为参数。 (2)与参数传递有关(l表示list,v表示vector)。execl、execlp 以
及execle要求将新程序的每个命令行参数(command-line
arguments )都指定为一个单独的参数,以NULL指针表明参数的结束。另外三个函数(execv、execvp和execve),首先须要建立一个指向各参数的指针数组,然后将该数组的地址作为这三个函数的参数。
(3)与向新程序传递环境变量表有关。以e结尾的两个函数
(execle和execve)可以传递一个指向环境字符串指针数组的指针。其它四个函数则使用调用进程中的environ变量为新进程复制现有的环境。
13、kill() //发送信号
头文件:#include 函数原型:int kill(pid_t pid, int sig); 函数说明:pid 发送信号的目标进程
sig 信号的类型
返回值:成功 0,失败 -1.。
14、raise()//进程给自己发信号 头文件:#include 函数原型:int raise(int sig);
15、alarm()//一段时间后给自己发送SIGALRM信号 头文件:#include 函数原型:unsigned int alarm(unsigned int seconds);
16、signal()//信号处理 头文件:#include 函数原型:sighandler_t signal(int signum, sighandler_t
handler);
17、sigaction()//POSIX标准 头文件:#include 函数原型:int sigaction(int signum, const struct sigaction
*act,struct sigaction *oldact); 函数说明:act表示要设置的对信号的新处理方式。
oldact表示原来对信号的处理方式。
返回值:函数执行成功返回0,失败返回-1。
18、pipe()//普通管道
头文件:#include 函数原型:int pipe(int filedes[2]); 函数说明:写到filedes[1]的所有数据都可以从filedes[0]读回来。
19、mkfifo()//命名管道
头文件:#include 函数原型:int mkfifo(const char *pathname, mode_t mode); 20、semget() (System V信号量) 头文件:#include
#include
#include 函数原型:int semget(key_t key, int nsems, int semflg); 函数说明:该函数的作用是创建一个新信号量或取得一个已有信
号量的键。参数key是一个整数值,不相关的进程可
以通过它访问同一个信号量。程序对所有信号量的访
问都是间接的,它先提供一个键,再由系统生成一个
相应的信号量标识符。只有 semget函数才能直接使
用信号量键,所有其他的信号量函数都是使用 semget 函数返回的信号量标识符。
21、semop() 头文件:#include
#include
#include 函数原型:int semop(int semid, struct sembuf *sops, unsigned
nsops); 函数说明:该函数用于改变信号量的值。
22、semctl() 头文件:#include
#include
#include 函数原型:int semctl(int semid, int semnum, int cmd, ...); 函数说明:该函数用来控制信号量信息。
23、shmget() 头文件:#include
#include 函数原型:int shmget(key_t key, size_t size, int shmflg); 函数说明:与信号量一样,程序需要提供一个参数key,它有效
地为共享内存命名。shmget函数返回一个共享内存标识符, 该标识符用于后续的共享内存函数。参数size以字节为单 位指定需要共享的内存容量。参数 shmflg包含9个比特 的权限标志,它们的作用与创建文件时使用的 mode标志 一样。
24、shmat() 头文件:#include
#include 函数原型:void *shmat(int shmid, const void *shmaddr, int
shmflg); 函数说明:第一次创建共享内存段时,它不能被任何进程访问。 要想启用对该共享内存的访问,必须将其连接到一个进程的地址 空间中,这项工作由shmat函数完成。 shmid是由shmget返回的共享内存标识符。
shmaddr指定共享内存连接到当前进程中的地址位置。它通常 是一个空指针,表示让系统来选择共享内存出现的地址。 shmflg是一组位标志。
25、shmdt() 头文件:#include
#include 函数原型:int shmdt(const void *shmaddr); 函数说明:shmdt函数的作用是将共享内存从当前进程中分离。
26、shmctl() 头文件:#include
#include
函数原型:int shmctl(int shmid, int cmd, struct shmid_ds
*buf); 函数说明:该函数是共享内存的控制函数shmid是shmget返回的 共享内存标识符。cmd是要采取的动作,有三个取值。
27、msgget() 头文件:#include
#include
#include 函数原型:int msgget(key_t key, int msgflg); 函数说明:msgget函数的作用是创建和访问一个消息队列。key 用来命名某个特定的消息队列。msgflg由9个权限标志组成。
28、msgsnd() 头文件:#include
#include
#include 函数原型:int msgsnd(int msqid, const void *msgp, size_t
msgsz, int msgflg); 函数说明:msgsnd函数用来把消息添加到消息队列中。
29、msgrcv() 头文件:#include
#include
#include 函数原型:ize_t msgrcv(int msqid, void *msgp, size_t msgsz,
long msgtyp, int msgflg); 函数说明:msgrcv函数从一个消息队列中获取消息。 30、msgctl() 头文件:#include
#include
#include 函数原型:int msgctl(int msqid, int cmd, struct msqid_ds *
buf); 函数说明:msgctl函数的作用与共享内存的控制函数非常类似。
31、pthread_create() 头文件:include
pthread_attr_t *attr,void *(*start_routine)(void*),
void *arg); 函数说明:thread指向一个pthread_t型变量,用于返回线程ID。 attr:用于定制各种不同的线程属性,一般设为NULL。 start_routine:新线程的工作函数。 arg:传递给执行函数的参数。
32、pthread_self() 头文件:#include
33、pthread_equal() 头文件:#include
相同
34、pthread_exit() 头文件:#include
35、pthread_join() 头文件:#include
**value_ptr); 返回值:成功返回0。
36、pthread_detach() 头文件:#include
37、sem_init()(POSIX信号量) 头文件:#include
函数原型:int sem_init(sem_t *sem, int pshared, unsigned int
value); 函数说明:初始化一个未命名的信号量(unnamed semaphore)。
sem指向需要初始化的信号量(sem_t类型)。 value指定信号量的初始值。
pshared表明信号量是在一个进程的多个线程之间共享还是在多个进程之间共享。若pshared为0,信号量被一个进程的多个线程共享,此时应该将信号量(sem_t)置于所以线程可见的位置(全局变量或动态分配)。
38、sem_wait() 头文件:#include 函数原型:int sem_wait(sem_t *sem); 函数说明:sem_wait函数以原子操作的方式将信号量的值减1, 但它会等待直到信号量有个非零值才会开始减法操作 。
39、sem_post() 头文件:#include 函数原型:int sem_post(sem_t *sem); 函数说明:sem_post函数以原子操作的方式给信号量的值加1。 40、sem_destroy() 头文件:#include 函数原型:int sem_destroy(sem_t *sem); 函数说明:sem_destroy函数的作用是用完信号量后对它进行清理,如果企图清理的信号量正被一些线程等待,就会收到一个错误。
41、互斥量
int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *attr);//初始化
int pthread_mutex_destroy(pthread_mutex_t *mutex);//销毁 int pthread_mutex_lock(pthread_mutex_t *mutex);//加锁 int pthread_mutex_trylock(pthread_mutex_t *mutex);//加锁 int pthread_mutex_unlock(pthread_mutex_t *mutex);//解锁
42、条件变量
使用条件变量前需要对它进行初始化:
int pthread_cond_init(pthread_cond_t *cond,const pthread_condattr_t *attr); 条件变量不用之后,应该用下面的函数进行销毁: int pthread_cond_destroy(pthread_cond_t *cond); 当程序中需要等待一个条件变量时,可以用下面的函数: int pthread_cond_timedwait(pthread_cond_t *cond,pthread_mutex_t *mutex, const struct timespec *abstime);
int pthread_cond_wait(pthread_cond_t *cond,pthread_mutex_t *mutex); 触发一个条件变量可以用以下函数:
int pthread_cond_broadcast(pthread_cond_t *cond); int pthread_cond_signal(pthread_cond_t *cond);
43、socket() 头文件:#include
#include 函数原型:int socket(int domain, int type, int protocol); 返回值:成功返回描述符,失败返回-1。 函数说明:domain使用哪个底层协议
type指定服务类型
protocol具体的协议 一般为0
44、bind() 头文件:#include
#include 函数原型:int bind(int socked, const struct sockaddr
*my_addr, socklen_t addrlen); 返回值:成功返回0,失败返回-1。
函数说明:bind将my_addr所指的socket地址分配给未命名的sockfd文件描述符,addrlen指出该地址的长度。
45、listen() 头文件:#include
#include 函数原型:int listen(int socked, int backlog); 返回值:成功返回0,失败返回-1。
函数说明:创建监听队列,backlog提示内核监听队列的最大长度。
46、accept() 头文件:#include
#include 函数原型:int accept(int socked, struct sockaddr *addr,
socklen_t *addrlen); 返回值:成功返回新的连接socket,失败返回0。
47、connect() 头文件:#include
#include 函数原型:int connect(int sockfd, const struct sockaddr
*serv_addr, socklen_t addrlen); 返回值:成功返回0,失败返回-1。
48、TCP数据读写
头文件:#include
#include 函数原型:ize_t recv(int sockfd, void *buf, size_t len,
int flags); ize_t send(int sockfd, const void *buf, size_t
len, int flags);
49、UDP数据读写
头文件:#include
#include 函数原型:ize_t recvfrom(int sockfd, void *buf, size_t len, int flags, struct sockaddr *src_addr, socklen_t *addrlen); zie_t sendto(int sockfd, const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addrlen); 50、lseek() 头文件:#include
#include 函数原型:off_t lseek(int fildes, off_t offset, int whence); 函数说明:参数whence必需是以下三个常量之一:
SEEK_SET:将文件偏移量设置在距文件开始处offset个字节。
SEEK_CUR:将文件偏移量设置在其当前值加offset,offset可正 可负。
SEEK_END:将文件偏移量设置为文件长度加offset,offset可正
可负。