标准IO函数
打开文件
1.fopen()
#include <stdio.h>
定义:
FILE *fopen(const char *filename, const char *mode);
功能:
打开一个文件,并返回一个指向该文件的指针(文件流)。
参数:
filename:要打开的文件名。
mode:打开模式,可以是“r”、“w”、“a”、“r+”、“w+”、“a+”。
返回值:
成功:返回一个指向文件流的指针。
失败:返回NULL。
关闭文件
2.fclose()
#include <stdio.h>
定义:
int fclose(FILE *stream);
功能:
关闭一个文件流。
参数:
stream:文件流指针。
返回值:
成功:返回0。
失败:返回EOF。
读文件
按字符读文件
3.fgetc()
#include <stdio.h>
定义:
int fgetc(FILE *stream);
功能:
从文件流中读取一个字符,并返回该字符的ASCII码。
参数:
stream:文件流指针。
返回值:
成功:返回读取到的字符的ASCII码。
失败:返回EOF。
按字符串读文件
4.fgets()
#include <stdio.h>
定义:
char *fgets(char *s, int n, FILE *stream);
功能:
从文件流中读取字符串,并存入字符串s中。
参数:
s:存放读入的字符串的缓冲区。
n:需要读取字符串的长度。
stream:文件流指针。
返回值:
成功:返回s。
失败:返回NULL。
按二进制读文件
5.fread()
#include <stdio.h>
定义:
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
功能:
从文件流中读取二进制数据,并存入ptr指向的内存中。
参数:
ptr:存放读入数据的内存地址。
size:每个数据项的大小。
nmemb:要读取的数据项的个数。
stream:文件流指针。
返回值:
成功:返回实际读取的字节数。
失败:返回0。
写文件
按字符写文件
6.fputc()
#include <stdio.h>
定义:
int fputc(int c, FILE *stream);
功能:
将一个字符c写入文件流。
参数:
c:要写入的字符。
stream:文件流指针。
返回值:
成功:返回写入的字符的ASCII码。
失败:返回EOF。
按行写文件
7.fputs()
#include <stdio.h>
定义:
int fputs(const char *s, FILE *stream);
功能:
将字符串s写入文件流。
参数:
s:要写入的字符串。
stream:文件流指针。
返回值:
成功:返回0。
失败:返回EOF。
按二进制写文件
8.fwrite()
#include <stdio.h>
定义:
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
功能:
将二进制数据写入文件流。
参数:
ptr:存放要写入数据的内存地址。
size:每个数据项的大小。
nmemb:要写入的数据项的个数。
stream:文件流指针。
返回值:
成功:返回实际写入的字节数。
失败:返回0。
文件定位
9.fseek()
#include <stdio.h>
定义:
int fseek(FILE *stream, long int offset, int whence);
功能:
定位文件流的读写位置。
参数:
stream:文件流指针。
offset:相对于whence的偏移量。
whence:偏移量的参考位置,可以是SEEK_SET、SEEK_CUR、SEEK_END。
返回值:
成功:返回0。
失败:返回非0。
10.ftell()
#include <stdio.h>
定义:
long int ftell(FILE *stream);
功能:
获取文件流的当前位置。
参数:
stream:文件流指针。
返回值:
当前位置的偏移量。
11.rewind()
#include <stdio.h>
定义:
void rewind(FILE *stream);
功能:
重置文件流的读写位置到文件头。
参数:
stream:文件流指针。
文件状态
12.ferror()
#include <stdio.h>
定义:
int ferror(FILE *stream);
功能:
检查文件流是否发生错误。
参数:
stream:文件流指针。
返回值:
发生错误:返回非0。
未发生错误:返回0。
13.feof()
#include <stdio.h>
定义:
int feof(FILE *stream);
功能:
检查文件流是否到达文件尾。
参数:
stream:文件流指针。
返回值:
到达文件尾:返回非0。
未到达文件尾:返回0。
重定向打开文件
14.freopen()
#include <stdio.h>
定义:
FILE *freopen(const char *filename, const char *mode, FILE *stream);
功能:
打开一个文件,并用stream代替原来的文件流。
参数:
filename:要打开的文件名。
mode:打开模式。
stream:文件流指针。
返回值:
成功:返回stream。
失败:返回NULL。
文件IO函数
打开文件
15.open()
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
定义:
int open(const char *pathname, int flags, mode_t mode);
功能:
打开一个文件,并返回一个文件描述符。
参数:
pathname:要打开的文件名。
flags:打开模式,可以是O_RDONLY、O_WRONLY、O_RDWR、O_APPEND、O_CREAT、O_TRUNC。
mode:文件权限。
返回值:
成功:返回文件描述符。
失败:返回-1。
关闭文件
16.close()
#include <unistd.h>
定义:
int close(int fd);
功能:
关闭一个文件描述符。
参数:
fd:文件描述符。
返回值:
成功:返回0。
失败:返回-1。
读文件
17.read()
#include <unistd.h>
定义:
ssize_t read(int fd, void *buf, size_t count);
功能:
从文件描述符fd中读取count个字节,并存入buf中。
参数:
fd:文件描述符。
buf:存放读入数据的缓冲区。
count:要读取的字节数。
返回值:
成功:返回实际读取的字节数。
失败:返回-1。
写文件
18.write()
#include <unistd.h>
定义:
ssize_t write(int fd, const void *buf, size_t count);
功能:
将buf中count个字节写入文件描述符fd中。
参数:
fd:文件描述符。
buf:存放要写入数据的缓冲区。
count:要写入的字节数。
返回值:
成功:返回实际写入的字节数。
失败:返回-1。
文件定位
19.lseek()
#include <unistd.h>
定义:
off_t lseek(int fd, off_t offset, int whence);
功能:
定位文件描述符fd的读写位置。
参数:
fd:文件描述符。
offset:相对于whence的偏移量。
whence:偏移量的参考位置,可以是SEEK_SET、SEEK_CUR、SEEK_END。
返回值:
成功:返回新的文件位置。
失败:返回-1。
文件属性获取
20.stat()
#include <sys/stat.h>
定义:
int stat(const char *pathname, struct stat *buf);
功能:
获取文件pathname的状态信息。
参数:
pathname:要获取信息的文件名。
buf:存放信息的结构体。
返回值:
成功:返回0。
失败:返回-1。
struct stat
{
dev_t st_dev; /* 设备ID */
ino_t st_ino; /* inode号 */
mode_t st_mode; /* 文件类型和权限 */
nlink_t st_nlink; /* 硬链接数 */
uid_t st_uid; /* 用户ID */
gid_t st_gid; /* 组ID */
off_t st_size; /* 大小 */
time_t st_atime; /* 最后访问时间 */
time_t st_mtime; /* 最后修改时间 */
time_t st_ctime; /* 最后状态改变时间 */
};
目录操作
21.opendir()
#include <dirent.h>
定义:
DIR *opendir(const char *name);
功能:
打开一个目录,并返回一个DIR指针。
参数:
name:要打开的目录名。
返回值:
成功:返回一个DIR指针。
失败:返回NULL。
22.readdir()
#include <dirent.h>
定义:
struct dirent *readdir(DIR *dirp);
功能:
读取目录dirp中的下一个目录项,并返回一个dirent指针。
参数:
dirp:目录指针。
返回值:
成功:返回一个dirent指针。
失败:返回NULL。
struct dirent
{
ino_t d_ino; /* 索引节点号*/
off_t d_off; /*在目录文件中的偏移量*/
unsigned short d_reclen; /* 文件名长度*/
unsigned char d_type; /* 文件类型 */
char d_name[256]; /* 文件名 */
};
23.closedir()
#include <dirent.h>
定义:
int closedir(DIR *dirp);
功能:
关闭目录dirp。
参数:
dirp:目录指针。
返回值:
成功:返回0。
失败:返回-1。
进程函数
创建进程
24.fork()
#include <unistd.h>
定义:
pid_t fork(void);
功能:
创建一个子进程,并返回子进程的PID。
参数:
无。
返回值:
成功:在父进程中返回子进程的PID,在子进程中返回0。
失败:返回-1。
退出进程
25.exit()
#include <stdlib.h>
定义:
void exit(int status);
功能:
退出当前进程并刷新缓冲区,返回status给父进程。
参数:
status:退出状态。
26._exit()
#include <stdlib.h>
定义:
void _exit(int status);
功能:
立即退出当前进程,并返回status给父进程。
参数:
status:退出状态。
等待子进程
27.wait()
#include <sys/types.h>
#include <sys/wait.h>
定义:
pid_t wait(int *status);
功能:
等待子进程结束,并返回子进程的PID和退出状态。
参数:
status:存放退出状态的指针。
返回值:
成功:返回子进程的PID。
失败:返回-1。
28.waitpid()
#include <sys/types.h>
#include <sys/wait.h>
定义:
pid_t waitpid(pid_t pid, int *status, int options);
功能:
等待子进程结束,并返回子进程的PID和退出状态。
参数:
pid:等待的子进程ID。
status:存放退出状态的指针。
options:选项
0:阻塞
WNOHANG:非阻塞(没有子进程退出会立刻返回)
返回值:
成功:返回子进程的PID。
失败:返回-1。
获取进程ID
29.getpid()
#include <unistd.h>
定义:
pid_t getpid(void);
功能:
获取当前进程的PID。
参数:
无。
返回值:
当前进程的PID。
30.getppid()
#include <unistd.h>
定义:
pid_t getppid(void);
功能:
获取父进程的PID。
参数:
无。
返回值:
父进程的PID。
线程函数
创建线程
31.pthread_create()
#include <pthread.h>
定义:
int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg);
功能:
创建一个线程,并返回线程ID。
参数:
thread:存放线程ID的指针。
attr:线程属性,一般为NULL。
start_routine:线程函数。
arg:线程函数的参数,可以为NULL。
返回值:
成功:返回0。
失败:返回非0。
退出线程
32.pthread_exit()
#include <pthread.h>
定义:
void pthread_exit(void *retval);
功能:
退出当前线程,并返回retval给父线程。
参数:
retval:线程退出值,可以为NULL。
等待线程
33.pthread_join()
#include <pthread.h>
定义:
int pthread_join(pthread_t thread, void **retval);
功能:
阻塞等待线程thread结束,并返回线程的退出值。
参数:
thread:线程ID。
retval:存放退出值的指针,可以为NULL。
返回值:
成功:返回0。
失败:返回非0。
获取线程ID
34.pthread_self()
#include <pthread.h>
定义:
pthread_t pthread_self(void);
功能:
获取当前线程的ID。
参数:
无。
返回值:
当前线程的ID。
线程分离
35.pthread_detach()
#include <pthread.h>
定义:
int pthread_detach(pthread_t thread);
功能:
参数:
thread:线程ID。
返回值:
成功:返回0。
失败:返回非0。
线程取消
36.pthread_cancel()
#include <pthread.h>
定义:
int pthread_cancel(pthread_t thread);
功能:
取消线程thread。
参数:
thread:线程ID。
返回值:
成功:返回0。
失败:返回非0。
37.pthread_testcancel()
#include <pthread.h>
定义:
void pthread_testcancel(void);
功能:
检查是否有线程取消。
参数:
无。
线程间通信
线程同步
初始化信号量
38.sem_init()
#include <semaphore.h>
定义:
int sem_init(sem_t *sem, int pshared, unsigned int value);
功能:
初始化一个信号量。
参数:
sem:信号量指针。
pshared:共享标志,0为线程间使用,1为进程间使用。
value:初始值。
返回值:
成功:返回0。
失败:返回非0。
申请资源(P操作)
39.sem_wait()
#include <semaphore.h>
定义:
int sem_wait(sem_t *sem);
功能:
申请一个信号量。
参数:
sem:信号量指针。
返回值:
成功:返回0。
失败:返回非0。
释放资源(V操作)
40.sem_post()
#include <semaphore.h>
定义:
int sem_post(sem_t *sem);
功能:
释放一个信号量。
参数:
sem:信号量指针。
返回值:
成功:返回0。
失败:返回非0。
线程互斥
初始化互斥锁
41.pthread_mutex_init()
#include <pthread.h>
定义:
int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *attr);
功能:
初始化一个互斥锁。
参数:
mutex:互斥锁指针。
attr:互斥锁属性,一般为NULL。
返回值:
成功:返回0。
失败:返回非0。
加锁
42.pthread_mutex_lock()
#include <pthread.h>
定义:
int pthread_mutex_lock(pthread_mutex_t *mutex);
功能:
加锁一个互斥锁。
参数:
mutex:互斥锁指针。
返回值:
成功:返回0。
失败:返回非0。
解锁
43.pthread_mutex_unlock()
#include <pthread.h>
定义:
int pthread_mutex_unlock(pthread_mutex_t *mutex);
功能:
解锁一个互斥锁。
参数:
mutex:互斥锁指针。
返回值:
成功:返回0。
失败:返回非0。
销毁互斥锁
44.pthread_mutex_destroy()
#include <pthread.h>
定义:
int pthread_mutex_destroy(pthread_mutex_t *mutex);
功能:
销毁一个互斥锁。
参数:
mutex:互斥锁指针。
返回值:
成功:返回0。
失败:返回非0。
条件变量
初始化条件变量
45.pthread_cond_init()
#include <pthread.h>
定义:
int pthread_cond_init(pthread_cond_t *cond, const pthread_condattr_t *attr);
功能:
初始化一个条件变量。
参数:
cond:条件变量指针。
attr:条件变量属性,一般为NULL。
返回值:
成功:返回0。
失败:返回非0。
等待条件
46.pthread_cond_wait()
#include <pthread.h>
定义:
int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex);
功能:
等待条件变量cond。
参数:
cond:条件变量指针。
mutex:互斥锁指针。
返回值:
成功:返回0。
失败:返回非0。
通知一个等待线程
47.pthread_cond_signal()
#include <pthread.h>
定义:
int pthread_cond_signal(pthread_cond_t *cond);
功能:
通知一个等待条件变量的线程。
参数:
cond:条件变量指针。
返回值:
成功:返回0。
失败:返回非0。
通知所有等待线程
48.pthread_cond_broadcast()
#include <pthread.h>
定义:
int pthread_cond_broadcast(pthread_cond_t *cond);
功能:
通知所有等待条件变量的线程。
参数:
cond:条件变量指针。
返回值:
成功:返回0。
失败:返回非0。
进程间通信
无名管道
创建管道
49.pipe()
#include <unistd.h>
定义:
int pipe(int filedes[2]);
功能:
创建一个无名管道,并返回文件描述符。
参数:
filedes:存放文件描述符的数组。
返回值:
成功:返回0。
失败:返回-1。
有名管道
创建管道
50.mkfifo()
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
定义:
int mkfifo(const char *pathname, mode_t mode);
功能:
创建一个有名管道。
参数:
pathname:管道名。
mode:权限。
返回值:
成功:返回0。
失败:返回-1。
信号
发送信号
51.kill()
#include <signal.h>
定义:
int kill(pid_t pid, int sig);
功能:
发送信号sig给进程pid。
参数:
pid:进程ID。
sig:信号值。
返回值:
成功:返回0。
失败:返回-1。
52.raise()
#include <signal.h>
定义:
int raise(int sig);
功能:
发送信号sig给当前进程。
参数:
sig:信号值。
返回值:
成功:返回0。
失败:返回-1。
定时器
53.alarm()
#include <unistd.h>
定义:
unsigned int alarm(unsigned int seconds);
功能:
设置一个定时器,在seconds秒后向进程发送SIGALRM信号。
参数:
seconds:定时时间,单位为秒。
返回值:
成功:返回0。
失败:返回非0。
挂起进程
54.pause()
#include <unistd.h>
定义:
int pause(void);
功能:
挂起进程,直到收到信号。
参数:
无。
返回值:
无。
信号处理
55.signal()
定义:
void (*signal(int signum, void (*func)(int)))(int);
或:
sighandler_t signal(int signum, sighandler_t handler);
功能:信号处理函数
参数:
signum:要处理的信号
handler:信号处理方式
SIG_IGN:忽略信号
SIG_DFL:执行默认操作
handler:捕捉信号
返回值:
成功:设置之前的信号处理方式
失败:-1
共享内存
创建key值
56.ftok()
#include <sys/ipc.h>
#include <sys/shm.h>
定义:
key_t ftok(const char *pathname, int proj_id);
功能:
创建一个key值。
参数:
pathname:文件名。
proj_id:项目ID。
返回值:
成功:返回key值。
失败:返回-1。
创建共享内存
57.shmget()
#include <sys/ipc.h>
#include <sys/shm.h>
定义:
int shmget(key_t key, size_t size, int flag);
功能:
创建一个共享内存。
参数:
key:key值。
size:共享内存大小。
flag:标志
IPC_CREAT:创建新的共享内存
IPC_EXCL:如果key值已存在,则返回错误
一般使用IPC_CREAT|IPC_EXCL|0777表示创建共享内存的时候的权限
返回值:
成功:返回共享内存ID。
失败:返回-1。
映射共享内存
58.shmat()
#include <sys/ipc.h>
#include <sys/shm.h>
定义:
void *shmat(int shmid, const void *shmaddr, int shmflg);
功能:
映射共享内存。
参数:
shmid:共享内存ID。
shmaddr:共享内存地址,一般为NULL。
shmflg:访问标志
0:以默认方式访问
0x100:以只读方式访问
返回值:
成功:返回共享内存地址。
失败:返回(void*)-1。
解除映射
59.shmdt()
#include <sys/ipc.h>
#include <sys/shm.h>
定义:
int shmdt(const void *shmaddr);
功能:
解除共享内存的映射。
参数:
shmaddr:共享内存地址。
返回值:
成功:返回0。
失败:返回-1。
删除共享内存
60.shmctl()
#include <sys/ipc.h>
#include <sys/shm.h>
定义:
int shmctl(int shmid, int cmd, struct shmid_ds *buf);
功能:
控制共享内存。
参数:
shmid:共享内存ID。
cmd:命令
IPC_RMID:删除共享内存
IPC_SET:设置共享内存属性
IPC_STAT:获取共享内存属性
buf:共享内存属性结构体。
返回值:
成功:返回0。
失败:返回-1。
信号灯集
创建或打开信号灯集
61.semget()
#include <sys/ipc.h>
#include <sys/sem.h>
定义:
int semget(key_t key, int nsems, int semflg);
功能:
创建或打开一个信号灯集。
参数:
key:key值。
nsems:信号灯个数。
semflg:标志
IPC_CREAT:创建新的信号灯集
IPC_EXCL:如果key值已存在,则返回错误
一般使用IPC_CREAT|IPC_EXCL|0777表示创建信号灯集的时候的权限
返回值:
成功:返回信号灯集ID。
失败:返回-1。
初始化信号灯集
62.semctl()
#include <sys/ipc.h>
#include <sys/sem.h>
定义:
int semctl(int semid, int semnum, int cmd, ... /* union semun arg */ );
功能:
初始化或设置信号灯集。
参数:
semid:信号灯集ID。
semnum:信号灯编号。
cmd:命令
SETVAL:设置信号灯的值
GETVAL:获取信号灯的值
GETALL:获取信号灯集的所有信号灯的值
IPC_RMID:删除信号灯集
IPC_SET:设置信号灯集属性
IPC_STAT:获取信号灯集属性
arg:当cmd为SETVAL时,需要传递共用体
返回值:
成功:返回0。
失败:返回-1。
union semun
{
int val; /* 信号量的初值 */
struct semid_ds *buf; /* Buffer for IPC_STAT, IPC_SET */
unsigned short *array; /* Array for GETALL, SETALL */
struct seminfo *__buf; /* Buffer for IPC_INFO (Linux-specific) */
};
PV操作
63.semop()
#include <sys/ipc.h>
#include <sys/sem.h>
定义:
int semop(int semid, struct sembuf *sops, size_t nsops);
功能:
对信号灯集合中的信号量进行PV操作。
参数:
semid:信号灯集ID。
sops:信号灯操作结构体。
nsops:信号灯操作个数。
返回值:
成功:返回0。
失败:返回-1。
struct sembuf
{
short sem_num; // 要操作的信号灯的编号
short sem_op; // 0 : 等待,直到信号灯的值变成0
// 1 : 释放资源,V操作
// -1 : 分配资源,P操作
short sem_flg; // 0(阻塞),IPC_NOWAIT, SEM_UNDO
};
消息队列
创建消息队列
64.msgget()
#include <sys/ipc.h>
#include <sys/msg.h>
定义:
int msgget(key_t key, int msgflg);
功能:
创建一个消息队列。
参数:
key:key值。
msgflg:标志
IPC_CREAT:创建新的消息队列
IPC_EXCL:如果key值已存在,则返回错误
一般使用IPC_CREAT|IPC_EXCL|0777表示创建消息队列的时候的权限
返回值:
成功:返回消息队列ID。
失败:返回-1。
发送消息
65.msgsnd()
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
定义:
int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg);
功能:
发送消息到消息队列。
参数:
msqid:消息队列ID。
msgp:消息指针。
msgsz:消息大小。
msgflg:标志
IPC_NOWAIT:如果消息队列已满,则返回错误
IPC_NOWAIT:如果消息队列已满,则阻塞等待直到消息队列空闲
一般使用0表示立即发送消息
返回值:
成功:返回0。
失败:返回-1。
接收消息
66.msgrcv()
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
定义:
ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg);
功能:
接收消息队列中的消息。
参数:
msqid:消息队列ID。
msgp:消息指针。
msgsz:消息大小。
msgtyp:消息类型。
msgflg:标志
IPC_NOWAIT:如果消息队列为空,则返回错误
IPC_NOWAIT:如果消息队列为空,则阻塞等待直到消息队列有消息
IPC_EXCEPT:接收除msgtyp外的所有消息
一般使用0表示接收任意消息
返回值:
成功:返回消息大小。
失败:返回-1。
控制消息队列
67.msgctl()
#include <sys/ipc.h>
#include <sys/msg.h>
定义:
int msgctl(int msqid, int cmd, struct msqid_ds *buf);
功能:
控制消息队列。
参数:
msqid:消息队列ID。
cmd:命令
IPC_RMID:删除消息队列
IPC_SET:设置消息队列属性
IPC_STAT:获取消息队列属性
buf:消息队列属性结构体。
返回值:
成功:返回0。
失败:返回-1。