#include<stdio.h>
fopen("文件路径","打开方式");//打开文件 标准io
fclose(文件流);//关闭文件 标准io
fgetc(文件流);//读一个字符 标准io
fgutc(‘要写的字符’,文件流);//写一个字符 标准io
fgets(存放字符串首地址(如buf),大小,文件流);//读一串字符 标准io
fguts(存放字符串首地址(如buf),大小,文件流);//写一串字符 标准io
fread(数据地址,数据大小,读多少个数据,文件流);//读取多个元素 标准io
fwrite(数据地址,数据大小,读多少个数据,文件流);//读取多个元素 标准io
rewind(NULL);//将位置指针定位到起始位置 标准io
fseek(文件流,偏移量,起始位置);//文件定位操作 标准io
ftell(文件流);//获取位置指针当前位置 标准io
freopen(“文件路径”,“文件打开方式”,文件流);//将指定的文件流重定向到打开的文件 标准io
#include<stdio.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<unistd.h>
open("文件路径",打开方式);//打开文件 文件io
close(文件描述符);//关闭文件 文件io
read(文件描述符,存放位置,期望读到的格式);//读取数据 文件io
write(文件描述符,存放位置,期望写到的格式);//写取数据 文件io
lseek(文件描述符,偏移量,相对位置);//偏移量正数从结尾负数从开头 文件io
#include<sys/stst.h>//文件属性获取
stat(“文件路径名”,存放文件属性的结构体);//获取文件属性 文件属性获取
#include<sys/types.h>
#include<dirent.h>
DIR*opendir(“要打开的目录流”);// 获得目录流 目录操作
readdir(目录流);//读目录 使用struct dirent *类型读目录 目录操作
closedir(目录流);//关闭目录 目录操作
库:
静态库制作:gcc -c add.c -o add.o
ar crs libmyadd.a add.o
gcc main.c -L. -lmyadd
动态库制作:gcc -fPIC -c add.c -o add.o
gcc -share -o libmyadd.so hello.o
gcc main.c -L -lmyadd
进程:
#include<sys/types.h>
#include<unistd.h>
pid_t fork();//创建子进程 使用pid_t 类型 在子进程返回值为0 进程
wait(NULL);//回收子进程 会阻塞函数 等待子进程退出结束阻塞
waitpid(pid,NULL,WNOHANG/0);//回收子进程 0阻塞WNOHANG不阻塞
exit(0);//退出进程 刷新缓存
_exit(0);//退出进程 不刷新缓存
getpid();//获取进程号
getppid();//获取父进程号
守护进程制作:
创建子进程 父进程退出 fork()
创建新会话 setsid()
运行路径为根目录 chdir(“/”)
重设文件权限掩码 umask(0)
关闭文件描述符 close()
线程:
#include<pthread.h>
pthread_create(&tid,NULL,handler(函数名),NULL);//使用pthread_t 类型 线程函数
pthread_join(tid,NULL);//等待线程结束并阻塞函数
pthread_exit();//退出线程
pthread_self();//获取线程id
pthread_detach(tid);//线程分离
pthread_cancel(tid);//取消线程
信号量:
#include<semaphore.h>
sem_init(&sem,0,1);//使用sem_t类型 0在线程使用 信号量初值
sem_wait(&sem);//申请资源p操作 有信号量时申请资源会使信号量-1信号量为0时会阻塞
sem_post(&sem);//释放资源v操作 释放一次信号量+1 函数不会堵塞
互斥锁:
#include<pthread.h>
pthread_mutex_init( &lock,NULL);//使用pthread_mutex_t 型 初始化互斥锁
pthread_mutex_lock(&lock);//申请互斥锁
pthread_mutex_unlock(&lock);//释放互斥锁
pthread_mutex_destroy(&lock);//销毁互斥锁
条件变量:
pthread_cond_init( &cond,NULL);//使用pthread_cond_t类型 初始化条件变量
pthread_cond_wait(&cond,&lock(对应的锁));//等待条件产生
pthread_cond_signal(&cond);//产生条件产生
无名管道:
#include<unistd.h>
pipe(int fd[2]);//创建无名管道 读段:fd[0] 写端:fd[1]
有名管道:
#include<sys/types.h>
#include<sys/stat.h>
mkfifo("管道文件名",权限);//创建有名管道
信号:
#include<signal.h>
kill(getpid()(指定进程),要发送的信号);//信号发送
raise(要发送的信号);//给自己发信号
#include<unistd.h>
alarm(定时);//在进程中设置定时器
pause();//将进程挂起,直到收到信号
信号处理函数:
#include<signal.h>
signal(要处理的信号(例如SIGINT),信号处理方式(例如SIG_IGN忽略信号));//信号处理函数
共享内存:
#include<sys/types.h>
#include<sys/ipc.h>
key_t ftok("文件名",'a');//使用key_t 类型 创建key值
shmget(key,共享内存大小(64k),权限);//创建或打开共享内存
shmat(共享内存的id,NULL,0);//映射 0是可读可写 SHM_RDONLY只读
shmdt(p(要取消的地址));//取消映射
shmctl(id,IPC_PMID,NULL);//删除共享内存
信号灯集:
#include<sys/sem.h>
semget(key,创建信号灯的数目,权限);//创建打开信号灯
semctl(semid,0(编号),SETCAL(IPC_RMID为删除),sem(当第三个参数为SETCAL就需要使用共用体));//初始化或删除信号灯集
要使用结构体 struct sembuf buf={0(编号),1/-1(1是v操作-1是p操作),0阻塞}
semop(id,操作方式,要操作的数量);//pv操作
标签:文件,NULL,IO,io,pthread,进程,include From: https://blog.csdn.net/2301_80508045/article/details/141497011消息队列:
#include<sys/msg.h>
struct msgbuf{
long mtype;
char mtext[N];
}
msgget(key,权限);//创建或打开消息
struct msgbuf msg={100(消息类型),正文,10}
msgsnd(id,&msg,大小,0(直到发送完成函数));//添加消息
msgrcv(id,$msg,大小,消息类型,0(阻塞));//读取消息
msgctl(id,IPC_RMID,NULL);//删除消息队列