Linux中的文件操作

linux中exec*为加载器,可以将程序加载到内存。
main()函数也是函数,也要被调用,也要被传参
故在一个程序中exec*系列的函数先被执行
程序替换中execve是系统调用,其他的都是封装。

进程程序替换
1.创建子进程的目的?
a.想让子进程执行父进程代码的一部分
b.想让子进程执行一个全新的程序
一个简单的命令行解释器
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/wait.h>
#include<assert.h>#define NUM 1024
char lineCommand[NUM];
#define OPT_NUM 64
char* myargv[OPT_NUM];int main()
{while(1){printf("用户名@主机名 当前路径#");fflush(stdout);char* s=fgets(lineCommand,sizeof(lineCommand)-1,stdin);assert(s!=NULL);(void)s;lineCommand[strlen(lineCommand)-1]=0;//printf("test:%s\n",lineCommand);//字符串切割myargv[0]=strtok(lineCommand," ");int i=1;while(myargv[i++]=strtok(NULL," "));
#ifdef DEBUGfor(int i=0;myargv[i];i++){printf("myargv[%d]:%s\n",i,myargv[i]);}
#endif//执行命令pid_t id=fork();assert(id!=-1);if(id==0){execvp(myargv[0],myargv);}waitpid(id,NULL,0);}return 0;
}
4.撤销与恢复
-
撤销语法::u //键盘输入符号:和字母u再回车(属于末行模式),撤销上一步操作
-
恢复语法:ctrl+r //键盘ctrl+r,恢复撤销操作(即取消之前的撤销操作)
Linux(CENTOS)操作系统_centos cp-CSDN博客文章浏览阅读1k次,点赞23次,收藏8次。学习Linux做的笔记分享一些_centos cphttps://blog.csdn.net/2301_79693363/article/details/137720252基础指令

vim中批量化注释
ctrf+v+I+esc
1,对文件操作的本质,进程对文件的操作
2.一个文件要被访问,就必须先被打开。
一个文件被形成的时候有默认文件掩码,普通文件以666作为起始权限,666&~umask可以的到最终权限。
目录默认:777 普通文件默认666
#include<stdio.h>
#include<unistd.h>
#include<string.h>#define FILE_NAME "log.txt"int main()
{//r,w,r+(对文件进行读写操作,不存在则报错),w+(读写,不存在则创建),a(append,追加),a+()//FILE* fp=fopen(FILE_NAME,"a");//if(fp==NULL)//{// perror("fopen");// return 1;//}//////int cnt =5;//while(cnt)//{// fprintf(fp,"%s:%d\n","hello file",cnt--);//}//fclose(fp);return 0;
}
对文件进行一些基础操作。
O_WRONLY|对文件进行写入
O_CREAT,0666 控制文件的权限
|O_TRUNC 每次以写的形式打开文件,文件对自动清空
O_APPEND 追加
文件操作的本质:进程和被打开文件的关系。
一个进程可以打开多个文件,系统中存在大量被打开的文件,被打开的文件会被OS管理起来,
管理的形式为先描述在组织,操作系统为了管理对应的打开文件,会为文件创建对应的内核数据结构标识文件,struct_file{}中包含了文件的大部分属性。
三个标准输入输出流:
stdin:->键盘
stdout:->显示器
stderr:->显示器
./myfile
stdin->fd: 0
stdout->fd: 1
stderr->fd: 2
fd:3
stdin:->键盘
stdout:->显示器
stderr:->显示器 默认占用文件描述符的0,1,2其他文件从3开始
FILE* fp=fopen();
FILE是一个结构体,结构体中必有一个字段->文件描述符。
进程的文件描述符表:
struct file* fd array[]
进程文件描述符表。
文件描述符的本质是数组下标。
#include<stdio.h>
#include<unistd.h>
#include<string.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<assert.h>#define FILE_NAME(number)"log.txt"#numberint main()
{printf("stdin->fd: %d\n",stdin->_fileno);printf("stdout->fd: %d\n",stdout->_fileno); printf("stderr->fd: %d\n",stderr->_fileno);umask(0);int fd0 = open(FILE_NAME(1),O_WRONLY|O_CREAT|O_APPEND,0666);//int fd=open(FILE_NAME,O_WRONLY|O_CREAT|O_TRUNC,0666);//if(fd<0)//{// perror("open");// return 1;//}printf("fd:%d\n",fd0);close(fd0);//r,w,r+(对文件进行读写操作,不存在则报错),w+(读写,不存在则创建),a(append,追加),a+()//FILE* fp=fopen(FILE_NAME,"a");//if(fp==NULL)//{// perror("fopen");// return 1;//}//////int cnt =5;//while(cnt)//{// fprintf(fp,"%s:%d\n","hello file",cnt--);//}//fclose(fp);return 0;
}
相关文章:
Linux中的文件操作
linux中exec*为加载器,可以将程序加载到内存。 main()函数也是函数,也要被调用,也要被传参 故在一个程序中exec*系列的函数先被执行 程序替换中execve是系统调用,其他的都是封装。 进程程序替换 1.创建子进程的目的࿱…...
[排序]hoare快速排序
今天我们继续来讲排序部分,顾名思义,快速排序是一种特别高效的排序方法,在C语言中qsort函数,底层便是用快排所实现的,快排适用于各个项目中,特别的实用,下面我们就由浅入深的全面刨析快速排序。…...
freertos的学习cubemx版
HAL 库的freertos 1 实时 2 任务->线程 3 移植 CMSIS_V2 V1版本 NVIC配置全部是抢占优先级 第四组 抢占级别有 0-15 编码规则, 变量名 :类型前缀, c - char S - int16_t L - int32_t U - unsigned Uc - uint8_t Us - uint…...
PyQt 信号与槽功能
PyQt 信号与槽功能 基本概念:在 PyQt 中,信号(Signal)与槽(Slot)是一种用于对象之间通信的机制。信号可以由一个对象发出,而槽是用于接收信号并执行相应操作的函数。 信号 信号是在 PyQt 的类…...
navicat premium安装和破解
https://blog.csdn.net/qq1031893936/article/details/90264688 提示信息 - 吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn...
OSI七层模型
OSI(Open System Interconnect),即开放式系统互连。 该体系结构标准定义了网络互连的七层框架(物理层、数据链路层、网络层、传输层、会话层、表示层和应用层 ),即OSI开放系统互连参考模型。 应用层 为用…...
Qt自定义MessageToast
效果: 文字长度自适应,自动居中到parent,会透明渐变消失。 CustomToast::MessageToast(QS("最多添加50张图片"),this);1. CustomToast.h #pragma once#include <QFrame>class CustomToast : public QFrame {Q_OBJECT pub…...
自动化测试 pytest 中 scope 限制 fixture使用范围!
导读 fixture 是 pytest 中一个非常重要的模块,可以让代码更加简洁。 fixture 的 autouse 为 True 可以自动化加载 fixture。 如果不想每条用例执行前都运行初始化方法(可能多个fixture)怎么办?可不可以只运行一次初始化方法? 答…...
软件-vscode-plantUML-drawio
文章目录 vscode基础命令 实操1. vscode实现springboot项目搭建 (包括spring data jpa和sqlLite连接) PlantUMLDrawio基础实操 vscode 基础 命令 启动mysql命令 docker run --name mysql-container -e MYSQL_ROOT_PASSWORD123456 -p 3306:3306 -d my…...
Python爬虫实战案例(爬取图片)
爬取图片的信息 爬取图片与爬取文本内容相似,只是需要加上图片的url,并且在查找图片位置的时候需要带上图片的属性。 这里选取了一个4K高清的壁纸网站(彼岸壁纸https://pic.netbian.com)进行爬取。 具体步骤如下: …...
智慧工地视频汇聚管理平台:打造现代化工程管理的全新视界
一、方案背景 科技高速发展的今天,工地施工已发生翻天覆地的变化,传统工地管理模式很容易造成工地管理混乱、安全事故、数据延迟等问题,人力资源的不足也进一步加剧了监管不到位的局面,严重影响了施工进度质量和安全。 视频监控…...
ASP.NET中的六大对象有哪些?以及各自的功能以及使用方式
在ASP.NET Web Forms中,并没有严格意义上的“六大对象”,但通常我们指的是与HTTP请求和响应处理紧密相关的几个内置对象。以下是这些对象及其功能、使用方式以及简单的实现源码示例: Response对象 功能:用于向客户端发送HTTP响应…...
Elastic 及阿里云 AI 搜索 Tech Day 将于 7 月 27 日在上海举办
活动主题 面向开发者的 AI 搜索相关技术分享,如 RAG、多模态搜索、向量检索等。 活动介绍 参加 Elastic 原厂与阿里云联合举办的 Generative AI 技术交流分享日。借助 The Elastic Search AI Platform, 使用开放且灵活的企业解决方案,以前所…...
基于ssm+vue医院住院管理系统源码数据库
摘 要 随着时代的发展,医疗设备愈来愈完善,医院也变成人们生活中必不可少的场所。如今,已经2021年了,虽然医院的数量和设备愈加完善,但是老龄人口也越来越多。在如此大的人口压力下,医院住院就变成了一个…...
【在排序数组中查找元素的第一个和最后一个位置】python刷题记录
R2-分治 有点easy的感觉,感觉能用哈希表 class Solution:def searchRange(self, nums: List[int], target: int) -> List[int]:nlen(nums)dictdefaultdict(list)#初始赋值哈希表,记录出现次数for num in nums:if not dict[num]:dict[num]1else:dict[…...
Pytorch基础:Tensor的squeeze和unsqueeze方法
相关阅读 Pytorch基础https://blog.csdn.net/weixin_45791458/category_12457644.html?spm1001.2014.3001.5482 在Pytorch中,squeeze和unsqueeze是Tensor的一个重要方法,同时它们也是torch模块中的一个函数,它们的语法如下所示。 Tensor.…...
PHP压缩打包,下载目录或者文件,解压zip文件
函数 /*** 压缩整个文件夹为zip文件* 本地需要绝对路径,服务器需要相对路径*/function makeZipFile($zip_path , $folder_path ) {$rootPath realpath($folder_path);$zip new ZipArchive(); // $zip->open($zip_path, ZipArchive::CREATE | ZipArchi…...
后端面试题日常练-day08 【Java基础】
题目 希望这些选择题能够帮助您进行后端面试的准备,答案在文末 Java中的静态变量和实例变量有何区别? a) 静态变量属于类,实例变量属于对象 b) 静态变量只能在静态方法中访问,实例变量只能在实例方法中访问 c) 静态变量在类加载时…...
Linux:core文件无法生成排查步骤
1、进程的RLIMIT_CORE或RLIMIT_SIZE被设置为0。使用getrlimit和ulimit检查修改。 使用ulimit -a 命令检查是否开启core文件生成限制 如果发现-c后面的结果是0,就临时添加环境变量ulimit -c unlimited,之后在启动程序观察是否有core生成,如果…...
大模型学习资源
上一篇扯了一堆废话,关于大模型,提供一下建议 说实话,大模型更新太快,以我30岁的高龄实在不适合再去研究技术。偶然发现,国内的大模型厂家在做推广的培训。比如上海人工智能实验室,阿里,百度。…...
python打卡day49
知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...
Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)
概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...
系统设计 --- MongoDB亿级数据查询优化策略
系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log,共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题,不能使用ELK只能使用…...
1.3 VSCode安装与环境配置
进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件,然后打开终端,进入下载文件夹,键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...
vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...
C# 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
力扣-35.搜索插入位置
题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...
【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制
使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下,限制某个 IP 的访问频率是非常重要的,可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案,使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...
【安全篇】金刚不坏之身:整合 Spring Security + JWT 实现无状态认证与授权
摘要 本文是《Spring Boot 实战派》系列的第四篇。我们将直面所有 Web 应用都无法回避的核心问题:安全。文章将详细阐述认证(Authentication) 与授权(Authorization的核心概念,对比传统 Session-Cookie 与现代 JWT(JS…...
篇章二 论坛系统——系统设计
目录 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 1. 数据库设计 1.1 数据库名: forum db 1.2 表的设计 1.3 编写SQL 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 通过需求分析获得概念类并结合业务实现过程中的技术需要&#x…...
