当前位置: 首页 > news >正文

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

相关文章:

  • 通信系统收发原理冷知识
  • Datawhale X 李宏毅苹果书 AI夏令营(深度学习入门)taks2
  • 跟《经济学人》学英文:2024年08月24日这期 What to make of America’s topsy-turvy economy
  • centos7安装Kafka单节点环境部署三-安装Logstash
  • MURF860AC-ASEMI智能AI专用MURF860AC
  • 虚幻游戏开发| 编辑器内正常运行但打包出错
  • 高级java每日一道面试题-2024年8月23日-框架篇[SpringBoot篇]-什么是JavaConfig?
  • ACM模式下算法题输入输出攻略【C++】
  • Adobe Lightroom Classic (LRC) 软件下载安装和软件使用介绍
  • 【Java】/* 与树有关的一些概念 */
  • u盘突然说要格式化才能访问?如何跳过格式化打开U盘
  • Java Web —— 第八天(登录功能)
  • SmartPing-记录下
  • Tita的OKR :产品经理的OKR
  • 测试用例(还需要输入1个字)
  • 4. 路由到控制器 - Laravel从零开始教程
  • canvas 五子棋游戏
  • Codepen 每日精选(2018-3-25)
  • C语言笔记(第一章:C语言编程)
  • hadoop集群管理系统搭建规划说明
  • JavaScript新鲜事·第5期
  • Java的Interrupt与线程中断
  • Java反射-动态类加载和重新加载
  • SpingCloudBus整合RabbitMQ
  • SpringCloud集成分布式事务LCN (一)
  • weex踩坑之旅第一弹 ~ 搭建具有入口文件的weex脚手架
  • 诡异!React stopPropagation失灵
  • 配置 PM2 实现代码自动发布
  • 七牛云 DV OV EV SSL 证书上线,限时折扣低至 6.75 折!
  • 适配mpvue平台的的微信小程序日历组件mpvue-calendar
  • 手写一个CommonJS打包工具(一)
  • 双管齐下,VMware的容器新战略
  • 微信小程序实战练习(仿五洲到家微信版)
  • 用简单代码看卷积组块发展
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • Spring第一个helloWorld
  • ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
  • #在线报价接单​再坚持一下 明天是真的周六.出现货 实单来谈
  • $.each()与$(selector).each()
  • (1)常见O(n^2)排序算法解析
  • (20050108)又读《平凡的世界》
  • (备忘)Java Map 遍历
  • (附源码)spring boot火车票售卖系统 毕业设计 211004
  • (论文阅读30/100)Convolutional Pose Machines
  • (深度全面解析)ChatGPT的重大更新给创业者带来了哪些红利机会
  • (十一)JAVA springboot ssm b2b2c多用户商城系统源码:服务网关Zuul高级篇
  • (学习日记)2024.01.19
  • (一)eclipse Dynamic web project 工程目录以及文件路径问题
  • (转)JAVA中的堆栈
  • *Django中的Ajax 纯js的书写样式1
  • ./configure,make,make install的作用(转)
  • .NET MAUI Sqlite程序应用-数据库配置(一)
  • .Net MVC + EF搭建学生管理系统
  • .net 程序发生了一个不可捕获的异常
  • .NET6使用MiniExcel根据数据源横向导出头部标题及数据