IO与进程

#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操作

 消息队列:

#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);//删除消息队列

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值