1、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()
2、
头文件:#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);
3、
函数说明: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();
函数说明:获得父进程的I
4、D。
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、
5、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
6、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),首先须要建立 一个指向各参数的指针
7、数组,然后将该数组的地址作为这三个函 数的参数。
(3)与向新程序传递环境变量表有关。以e结尾的两个函数 (execle和execve)可以传递一个指向环境字符串指针数组的指 针。其它四个函数则使用调用进程中的environ变量为新进程复 制现有的环境。
13、kill() //发送信号
头文件:#include
函数原型:int kill(pid_t pid, int sig);
函数说明:pid 发送信号的目标进程
sig 信号的类型
返回值:成功 0,失败 -1.。
14、raise()//进程给自己发信号
头文件:#include 8、l.h>
函数原型: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 9、l.h>
函数原型: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
10、)//命名管道
头文件:#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是一个整数值,
11、不相关的进程可 以通过它访问同一个信号量。程序对所有信号量的访 问都是间接的,它先提供一个键,再由系统生成一个 相应的信号量标识符。只有 semget函数才能直接使 用信号量键,所有其他的信号量函数都是使用 semget 函数返回的信号量标识符。
21、semop()
头文件:#include
#include
#include
函数原型:int semop(int semid, struct sembuf *sops, unsigned n
12、sops);
函数说明:该函数用于改变信号量的值。
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
13、shmflg);
函数说明:与信号量一样,程序需要提供一个参数key,它有效 地为共享内存命名。shmget函数返回一个共享内存标识符, 该标识符用于后续的共享内存函数。参数size以字节为单 位指定需要共享的内存容量。参数 shmflg包含9个比特 的权限标志,它们的作用与创建文件时使用的 mode标志 一样。
24、shmat()
头文件:#include
#include
函数原型:void *shmat(int shmid, const void *shmaddr, int sh
14、mflg);
函数说明:第一次创建共享内存段时,它不能被任何进程访问。 要想启用对该共享内存的访问,必须将其连接到一个进程的地址 空间中,这项工作由shmat函数完成。
shmid是由shmget返回的共享内存标识符。
shmaddr指定共享内存连接到当前进程中的地址位置。它通常
是一个空指针,表示让系统来选择共享内存出现的地址。
shmflg是一组位标志。
25、shmdt()
头文件:#include
#include
函数原型:int shmdt(const void *shmaddr);
函数说明:shm
15、dt函数的作用是将共享内存从当前进程中分离。
26、shmctl()
头文件:#include
#include
函数原型:int shmctl(int shmid, int cmd, struct shmid_ds *buf);
函数说明:该函数是共享内存的控制函数shmid是shmget返回的 共享内存标识符。cmd是要采取的动作,有三个取值。
27、msgget()
头文件:#include
#include
#include
16、
函数原型: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);
函数说明:m
17、sgsnd函数用来把消息添加到消息队列中。
29、msgrcv()
头文件:#include
#include
#include
函数原型:ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg);
函数说明:msgrcv函数从一个消息队列中获取消息。
30、msgctl()
头文件:#include
#include
18、
#include
函数原型:int msgctl(int msqid, int cmd, struct msqid_ds * buf);
函数说明:msgctl函数的作用与共享内存的控制函数非常类似。
31、pthread_create()
头文件:include
函数原型:int pthread_create(pthread_t *thread, const pthread_attr_t *attr,void *(*start_routine)(void*), void *arg);
函数说
19、明:thread指向一个pthread_t型变量,用于返回线程ID。
attr:用于定制各种不同的线程属性,一般设为NULL。
start_routine:新线程的工作函数。
arg:传递给执行函数的参数。
32、pthread_self()
头文件:#include
函数原型:pthread_t pthread_self(void);
函数说明:线程ID的获取方式有两种:通过pthread_create()返 回给调用者;通过pthread_self()获得其自身的ID。
33、pthread_equal()
头文件:#include 20、d.h>
函数原型:int pthread_equal(pthread_t t1, pthread_t t2);
函数说明:可以使用pthread_equal()函数检查两个线程ID是否 相同
34、pthread_exit()
头文件:#include
函数原型:void pthread_exit(void *value_ptr);
函数说明:调用pthread_exit()等价于在工作函数中执行 return,区别是pthread_exit()可以在工作函数调用的任何函数 中被调用。
35、pthread_join()
头文件:#includ
21、e
函数原型:int pthread_join(pthread_t thread, void **value_ptr);
返回值:成功返回0。
36、pthread_detach()
头文件:#include
函数原型:int pthread_detach(pthread_t thread);
函数说明:线程分离。
37、 sem_init()(POSIX信号量)
头文件:#include
函数原型:int sem_init(sem_t *sem, int pshared, unsigne
22、d 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函数以原
23、子操作的方式将信号量的值减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
24、 互斥量
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_
25、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,
con
26、st 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 s
27、ocket(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。
函数说明:bin
28、d将my_addr所指的socket地址分配给未命名的sockfd文件描述符,addrlen指出该地址的长度。
45、 listen()
头文件:#include
#include
函数原型:int listen(int socked, int backlog);
返回值:成功返回0,失败返回-1。
函数说明:创建监听队列,backlog提示内核监听队列的最大长度。
46、 accept()
头文件:#include
#include
函数原型
29、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 30、ys/types.h>
#include
函数原型:ssize_t recv(int sockfd, void *buf, size_t len,
int flags);
ssize_t send(int sockfd, const void *buf, size_t
len, int flags);
49、 UDP数据读写
头文件:#include
#include
函数原型:ssize_t recvfrom(int sockfd, void *buf, size_t
len
31、 int flags, struct sockaddr *src_addr,
socklen_t *addrlen);
sszie_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可正
可负。