【elfboard linux开发板】4. 文件点灯与创建多进程
ps:提升效率的小tips:
灵活运用vim操作命令,gg快速跳转到文件开头,G跳转到结尾
多行操作ctrl + V
shift + i
插入修改内容
esc退出编辑sudo vi /etc/vim/vimrc
在文件中添加如下内容省略重复工作:
autocmd BufNewFile *.c,*.cpp,*.h,*.sh,*.java exec ":call SetTitle()"
func SetTitle()if &filetype == 'c'call setline(1,"#include <unistd.h>")call append(line(".")," ")call append(line(".")+1,"int main(int args,char*argv[])")call append(line(".")+2,"{")call append(line(".")+3," ")call append(line(".")+4,"}")endif
endfunction
1.文件
以下命令都可以在vim编辑器里,通过在命令模式下2K跳转查询;也可以在终端中man 2 命令查询
a. int open( const char *pathname, int flags,[mode_t mode])
返回值:成功返回文件描述符,失败返回-1
flags参数可以填写: O_RDONLY, O_WRONLY, O_RDWR分别表示只读、只写、可读可写, O_CREAT 没有就创建该文件
mode参数与flags参数有关,如果flags参数为O_CREAT, 该参数为新建文件的权限值,一般用8进制位传入,方便阅读;且与外部umask掩码有关,权限为mode-umask
需要包含下面头文件:
#include <fcntl.h>
#include <sys/stat.h>
b. ssize_t read(int fd, void *buf, size_t count)
返回值:成功返回读取的字符长度,0说明读到了文件的结尾,失败返回-1,并且设置errno
errno 函数头文件 #include <errno.h>
输出错误信息:perror("error is ")
fd : 文件描述符
读取count个字符放到buf中
c. int close(int fd)
返回值:成功返回0,失败返回-1,并设置errno
关闭文件
/*
读文件 输出到终端
*/
#include<stdio.h>
#include <errno.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>int main(int args,char* argv[]){int fd = open(argv[1], O_RDONLR);if(fd==-1){perror("open error");exit(1);}int len;char buf[1024];while((len=read(fd,buf,sizeof(buf)))!=0){if(len==-1){perror("read error");exit(1);}for(int i=0;i<len;i++){printf("%c",buf[i]);}printf("\n");}close(fd);return 0;
}
d. ssize_t write(int fd, const void *buf, size_t count)
作用:向文件描述符fd指向的文件,写入count个buf其实地址开始的字符;
返回值:成功返回写入成功的字节数,错误返回-1,且设置errno
e. off_t lseek(int fd, off_t offset, int whence)
作用:将光标移到whence位置
offset: 偏移位置
whence常用参数:
SEEK_SET: 移动到设置的offset位置
SEEK_CUR: 移动到现在光标+offset位置
SEEK_END:移到到文件末尾+offset位置
f. dup2(int oldfd, int newfd)
作用:用newfd指向oldfd文件描述符
/*
文件名:file_write_arm.c
作用:写文件与显示写入内容
author: LiuGuoyong
date:2023/12/27
*/
#include<stdio.h>
#include <errno.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>int main(int args,char* argv[]){int fd = open(argv[1], O_WRONLY|O_CREAT,0777);int fd2 = open(argv[2], O_WRONLY|O_CREAT,0777);char buf[2] = {'1','0'}; dup2(STDOUT_FILENO,fd); //将fd指向了标准输出,向fd中写入会直接显示到终端中if(fd==-1){perror("open fd error");exit(1);}if(fd2==-1){perror("open fd2 error");exit(1);}while(1){lseek(fd,0,SEEK_SET);lseek(fd2,0,SEEK_SET);write(fd,buf,1);write(fd2,&buf[1],1);sleep(2);lseek(fd,0,SEEK_SET);lseek(fd2,0,SEEK_SET);write(fd,&buf[1],1);write(fd2,buf,1);sleep(2);}close(fd);close(fd2);return 0;
}


2. 进程
- pid_t fork()创建子进程
返回值:0:子进程,-1:失败,并且生成errno,>0: 子进程pid号 - waitpid(pid_t pid,int *wstatus, int options)回收子进程
pid:-1 任意子进程
< < <-1 回收进程组id等于 pid的绝对值
0 子进程创建过程
> > > 0 子进程pid号 - pid_t getpid() 获取进程id
/*
名称:pid_arm.c
*/#include <unistd.h>
#include <stdio.h>
#include <sys/wait.h>int main(void){pid_t pid;int i = 0;for(;i<5;i++){if((pid = fork())==0)break;} if(i == 5){sleep(5);waitpid(-1,NULL,0);printf("pid is %d\n",getpid());}else{sleep(i);printf("pid is %d\n",getpid());}return 0;
}
编译发送同前;
效果:
相关文章:
【elfboard linux开发板】4. 文件点灯与创建多进程
ps:提升效率的小tips: 灵活运用vim操作命令,gg快速跳转到文件开头,G跳转到结尾 多行操作 ctrl V shift i 插入修改内容 esc退出编辑 sudo vi /etc/vim/vimrc 在文件中添加如下内容省略重复工作: autocmd BufNewFile …...
黑马程序员SSM框架-Maven进阶
视频链接:Maven-01-分模块开发的意义_哔哩哔哩_bilibili 分模块开发与设计 分模块开发意义 分模块开发 依赖管理 依赖传递 依赖传递冲突问题 可以点击红框按钮查看依赖情况。 可选依赖和排除依赖 继承和聚合 聚合 聚合工程开发 继承 聚合和继承的区别 属性 属性…...
MFC综合实验二学习记录
文章目录 虚函数和纯虚函数的区别?MFC中什么是UPDATE_COMMAND_UI 消息如何查看控件对应的成员变量模态对话框的理解HGDIOBJ" 类型的值不能用于初始化 "CBrush *" 类型的实体错误MFC编程中CDC类型和HDC类型有什么区别?关于WIDING和ALTERNA…...
Python 中的运算符介绍(1)
算数运算符 常见的% 、//、/ 用法 赋值运算符 赋值运算:将等号右边赋值给等号左边 常见场景: 比较运算符 代码解析: 逻辑运算符 位运算符(了解) 三目运算符 身份证运算符 成员运算符...
达梦数据库查询各表数据量/以及达梦更新统计信息
1、达梦数据库查询各表数据量 达梦数据库与开源的MySQL不一样,MySQL查询各表数据量非常简单 而达梦数据库就有一些地方要注意,先用这句去查↓ SELECT table_name, num_rows FROM all_tables WHERE tablespace_name 表空间名; 如果结果如下图一样&…...
Java---- 静态内部类与非静态内部类的区别
在面试中回答的很不全,所以再此做一个总结。 1 static 静态修饰符 在程序中任何变量或者代码都是在编译时由系统自动分配内存来存储的。 static修饰表示静态的,在类加载时JVM会把它放到方法区,被本类以及本类中所有实例所公用。在编译后所分…...
STM32 基础知识(探索者开发板)--135讲 ADC转换
ADC定义: ADC即模拟数字转换器,英文详称 Analog-to-digital converter,可以将外部的模拟信号转换 ADC数模转换中一些常用函数: 1. HAL_ADC_Init 函数 HAL_StatusTypeDef HAL_ADC_Init(ADC_HandleTypeDef *hadc); 初始化ADC 形参&…...
Java经典框架之SpringBoot
SpringBoot Java 是第一大编程语言和开发平台。它有助于企业降低成本、缩短开发周期、推动创新以及改善应用服务。如今全球有数百万开发人员运行着超过 51 亿个 Java 虚拟机,Java 仍是企业和开发人员的首选开发平台。 课程内容的介绍 1. SpringBoot基础 2. Spring…...
LeetCode75| 二叉搜索树
目录 700 二叉搜索树中的搜索 迭代 递归 450 删除二叉搜索树中的节点 700 二叉搜索树中的搜索 注意二叉搜索树的性质即可 迭代 class Solution { public:TreeNode* searchBST(TreeNode* root, int val) {while(root ! NULL){if(root->val < val)root root->r…...
博物馆3d虚拟场景复原制作有助于传承和弘扬中华民族优秀传统文化
古建筑3D虚拟复原是一种利用现代科技手段对古代建筑进行数字化保护和展示的方法。它通过高精度的三维扫描技术,将古建筑的形态、结构、材料等信息转化为数字化数据,再通过计算机图形学技术将这些数据重建为虚拟的三维模型。这种技术在古建筑保护、研究、…...
二维码地址门牌系统:便捷报修服务引领社区新篇章
文章目录 前言一、二维码门牌系统介绍二、便捷报修服务三、多功能应用四、技术发展与应用前景 前言 科技的快速发展引领了社区生活的新变革,其中二维码门牌系统技术在社区管理方面带来了极大的便利和智能化服务。本文将深入了解这项创新技术及其优势。 一、二维码门…...
c++基础(对c的扩展)
文章目录 命令空间引用基本本质引用作为参数引用的使用场景 内联函数引出基本概念 函数补充默认参数函数重载c中函数重载定义条件函数重载的原理 命令空间 定义 namespace是单独的作用域 两者不会相互干涉 namespace 名字 { //变量 函数 等等 }eg namespace nameA {int num;v…...
RS485数据采集模块,如何一次采集多个modbus设备数据?
在工业数据采集中,RS485是一种常见的数据通信协议,而Modbus则是其上的常用设备协议。那么,如何用一个模块高效采集多个Modbus设备的数据呢?这就是我们今天要探讨的话题! 什么是RS485数据采集模块? 首先&a…...
面试 Vue 框架八股文十问十答第一期
面试 Vue 框架八股文十问十答第一期 作者:程序员小白条,个人博客 相信看了本文后,对你的面试是有一定帮助的!关注专栏后就能收到持续更新! ⭐点赞⭐收藏⭐不迷路!⭐ 1)MVVM 的理解 MVVM (Mod…...
【积微成著】性能测试调优实战与探索(存储模型优化+调用链路分析)| 京东物流技术团队
一、前言 性能测试之于软件系统,是保障其业务承载能力及稳定性的关键措施。以软件系统的能力建设为主线,系统能力设计工作与性能测试工作,既有先后之顺序,亦有相互之影响。以上,在性能测试的场景决策,架构…...
建立分位制,用标准去量化优化效果 - 启动优化为例
Android开发的四年多时间中,逐渐将自己的工作重心从业务移动到小型项目的架构设计,在此过程中代码的书写有了更高的标准和要求,性能优化从此伴随着工作脚步, 为什么要进行性能优化呢? 页面访问时长从1s增加到3s&#…...
Modbus 通信协议 二
Modbus 常用缩写 通用Modbus帧结构 -应用数据单元(ADU) Modbus数据模型 Modbus ADU 和 PDU 的长度 Modbus PDU结构 串行链路上的 Modbus 帧结构 Modbus 地址规则 ASCLL 模式 和 RTU 模式的比较 RTU 模式 RTU 模式位序列 帧格式 帧的标识与鉴别 CRC 循环冗…...
关于系统设计的一些思考
0.前言 当我们站在系统设计的起点,面对一个新的需求,我们该如何开始呢?这是许多处于系统分析与设计领域的新手常常思考的问题。有些人可能会误以为,只要掌握了诸如面向对象、统一建模语言、设计模式、微服务、Serverless、Servic…...
Java 第19章 IO流 课堂练习+本章作业
文章目录 Buffered流拷贝二进制文件创建文件写入文本读取文本文件存读Properties文件 Buffered流拷贝二进制文件 package com.hspedu.chapter19.outputStream;import java.io.*;public class BufferedCopy02 {public static void main(String[] args) {String srcFilePath &q…...
一键制作电子样册,提升企业品牌形象
电子样册作为一种新型的宣传方式,具有许多优势。首先,它打破了传统纸质宣传册的局限性,可以随时随地展示企业的产品和服务。其次,电子样册可以通过多媒体形式展示企业的品牌形象,包括图片、视频、文字等多种形式&…...
LEANN:基于选择性重计算的本地向量检索,实现97%存储压缩
1. 项目概述:LEANN,一个重新定义本地向量检索的开源项目如果你和我一样,对当前AI应用生态里动辄需要将个人数据上传到云端、依赖昂贵且臃肿的向量数据库感到厌倦,那么LEANN的出现,绝对会让你眼前一亮。这不仅仅是一个工…...
TegraRcmGUI完整指南:Windows上最简单快速的Switch注入工具教程
TegraRcmGUI完整指南:Windows上最简单快速的Switch注入工具教程 【免费下载链接】TegraRcmGUI C GUI for TegraRcmSmash (Fuse Gele exploit for Nintendo Switch) 项目地址: https://gitcode.com/gh_mirrors/te/TegraRcmGUI TegraRcmGUI是Windows平台上最简…...
观察智能体项目使用 Taotoken 后的月度 token 消耗与成本趋势
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 观察智能体项目使用 Taotoken 后的月度 token 消耗与成本趋势 对于一个持续运行的智能体项目而言,清晰的成本洞察是项目…...
终极分子绘图工具Ketcher:免费在线化学结构编辑器完整指南
终极分子绘图工具Ketcher:免费在线化学结构编辑器完整指南 【免费下载链接】ketcher Web-based molecule sketcher 项目地址: https://gitcode.com/gh_mirrors/ke/ketcher 还在为复杂的化学结构绘图而烦恼吗?传统绘图工具操作繁琐、格式兼容性差、…...
现代安全监控系统构建指南:从IPVS架构到智能分析实战
1. 项目概述:从“想要”到“拥有”,安全监控系统的核心价值“安华高科技给你想要的安全监控系统!”——这个标题听起来像是一句承诺,但背后其实是一个复杂的系统工程。作为一名在安防行业摸爬滚打了十几年的从业者,我见…...
Lyrebird语音变声器完整指南:从安装到高级使用技巧
Lyrebird语音变声器完整指南:从安装到高级使用技巧 【免费下载链接】lyrebird 🦜 Simple and powerful voice changer for Linux, written with Python & GTK 项目地址: https://gitcode.com/gh_mirrors/lyr/lyrebird Lyrebird是一款专为Linu…...
Linux 2.6内核源码深度解读:kernel/time.c文件分析
一、引言:内核的时间维度与心跳引擎kernel/time.c是Linux内核中掌控时间流动与计时基准的核心文件,它负责将底层硬件时钟的离散脉冲转化为系统可用的连续时间概念,并为内核所有需要计时的功能提供基础设施。在操作系统语境中,&quo…...
避坑指南:ESP32 ADC采样时这些操作会让数据‘丢帧’(WiFi冲突、看门狗、串口打印)
ESP32 ADC采样稳定性实战:规避数据丢失的6个关键策略 在物联网和嵌入式开发领域,ESP32因其出色的无线连接能力和丰富的外设资源成为热门选择。但当开发者将其ADC(模数转换器)功能用于高精度数据采集时,常常会遇到采样数…...
MATLAB 2024 升级指南:彻底卸载旧版,高效部署新版
1. 为什么需要彻底卸载旧版MATLAB? 每次MATLAB大版本更新都会带来新功能和性能优化,但很多用户直接覆盖安装后常遇到各种奇怪问题。我去年帮实验室处理过几十台电脑的升级故障,90%的问题都源于旧版残留文件。比如有位同学复现图像处理代码时&…...
终极开源Spotify音乐下载指南:永久保存你的音乐收藏
终极开源Spotify音乐下载指南:永久保存你的音乐收藏 【免费下载链接】spotify-downloader Download your Spotify playlists and songs along with album art and metadata (from YouTube if a match is found). 项目地址: https://gitcode.com/gh_mirrors/spotif…...
