首页 > 系统相关 >IO与进程

IO与进程

时间:2024-08-25 13:56:49浏览次数:8  
标签:文件 NULL IO io pthread 进程 include

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

标签:文件,NULL,IO,io,pthread,进程,include
From: https://blog.csdn.net/2301_80508045/article/details/141497011

相关文章

  • IO进程练习---往文件中录入当前时间
     题目要求编程读写一个文件test.txt,每隔1秒向文件中写入一行录入时间的数据,类似这样:1 2007-7-3015:16:42 2 2007-7-3015:16:43该程序应该无限循环,直到按Ctrl-C中断程序。再次启动程序写文件时可以追加到原文件之后,并且序号能够接续上次的序号,比如:1  2007......
  • 进程间通信
    进程间通信进程间通信(Inter-ProcessCommunication,IPC)是指在不同进程之间进行数据交换和信息传递的机制。常见的通信方式有:管道、消息队列、共享内存、信号量、socket。管道(Pipe)无名管道:特点:只能在具有亲缘关系的进程之间使用(如父子进程)。它是半双工的,即数据只能在一个方向上......
  • [AGC067B] Modifications
    MyBlogs[AGC067B]Modifications谔谔,做过类似的题还是不会啊啊啊。首先考虑给定一个\(a\)序列如何进行判定。倒着做这个覆盖的过程,每次可以看成是,如果\([l_i,r_i]\)剩下的点的颜色都相同,则可以把\([l_i,r_i]\)删掉。如果最后能删空就是合法的。区间DP判定这个过程:\(f......
  • apt update 报错:Could not handshake: Error in the pull function. [IP: 185.199.108
    sudoaptupdate报错:错误:12https://nvidia.github.io/nvidia-container-runtime/stable/ubuntu18.04/amd64ReleaseCouldnothandshake:Errorinthepullfunction.[IP:185.199.108.153443]错误:13https://nvidia.github.io/nvidia-docker/ubuntu18.04/amd64Re......
  • @Transitional注解失效场景
     @Transitional注解用于完成声明式事务操作,默认当发生RuntimeException时会对当前事务操作进行回滚,但其使用不当就会造成失效;场景一:抛出异常非RuntimeException@Transitionalpublicvoidinsert()throwsException{//insert...thrownewException();}解决......
  • C++面试基础系列-macro_definition宏定义
    系列文章目录文章目录系列文章目录C++面试基础系列-macro_definition宏定义Overview1.宏定义的概念1.1.基本宏定义1.2.带参数的宏1.3.条件编译1.4.宏的展开1.5.宏的副作用1.6.宏与类型1.7.宏的撤销1.8.宏的可见性1.9.避免宏冲突1.10.宏与函数的区别1.11.字......
  • 【论文阅读】TBA Faster Large Language Model Training Using SSD Based Activation
    摘要GPU内存容量的增长速度跟不上大型语言模型(llm)的增长速度,阻碍了模型的训练过程。特别是,激活——在前向传播过程中产生的中间张量,并在后向传播中重用——主导着GPU内存的使用。为了应对这一挑战,我们建议TBA将激活有效地卸载到高容量NVMessd上。这种方法通过自适应地将数据传......
  • ECOS3010 mathematical equations
    ECOS3010:Assignment1(Total:20marks)Due11:59pm,FridayAug30,20241.Homeworkmustbeturnedinonthedayitisdue.Worknotsubmittedonorbeforetheduedateissubjecttoapenaltyof5%percalendardaylate.Ifworkissubmittedmorethan......
  • swiftUI-extension的使用
    在Swift中,extension关键字用于为现有的类、结构体、枚举或协议添加新的功能,而无需修改原始源代码。扩展可以添加新的方法、计算属性、初始化器、下标、嵌套类型和遵循协议等。以下是一些常见的extension用法示例:为类添加方法extensionString{funcreversedString()......
  • 全面提升!上海交大等联合发布MegaFusion:无须微调的高效高分辨率图像生成方法
    文章链接:https://arxiv.org/pdf/2408.11001项目链接:https://haoningwu3639.github.io/MegaFusion/亮点直击提出了一种无需调优的方法——MegaFusion,通过截断与传递策略,以粗到细的方式高效生成百万像素的高质量、高分辨率图像;结合了膨胀卷积和噪声重新调度技术,......