【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. 进程

  1. pid_t fork()创建子进程
    返回值:0:子进程,-1:失败,并且生成errno,>0: 子进程pid号
  2. waitpid(pid_t pid,int *wstatus, int options)回收子进程
    pid:

    -1 任意子进程
    < < <-1 回收进程组id等于 pid的绝对值
    0 子进程创建过程
    > > > 0 子进程pid号

  3. 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;
}

编译发送同前;
效果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/593675.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

霹雳吧啦Wz《pytorch图像分类》-p3VGG网络

《pytorch图像分类》p3VGG网络详解及感受野的计算 一、零碎知识点1.nn.Sequential2.**kwargs 二、VGG网络模型详解1.感受野2.模型手算 三、代码1.module.py2.train.py3.predict.py 一、零碎知识点 论文连接&#xff1a;VERY DEEP CONVOLUTIONAL NETWORKS FOR LARGE-SCALE IMAG…

结算时间和可组合性助力Sui上DeFi蓬勃发展

结算时间是基于Sui交易处理模型的度量标准&#xff0c;确保DeFi用户几乎立即看到交易结果。可组合性则是深深融入Sui的编程环境&#xff0c;扩展了其对对象和智能合约的影响。Sui深度的可组合性赋予DeFi构建者引入创新产品的能力&#xff0c;使其在其他区块链上的DeFi应用中独树…

基于Java校园招待所管理系统

基于Java校园招待所管理系统 功能需求 1、客房管理&#xff1a;系统需要管理招待所的客房信息&#xff0c;包括房间类型、数量、价格、状态等&#xff0c;并能够实时更新客房状态。 2、客人管理&#xff1a;系统需要记录客人的基本信息&#xff0c;包括姓名、性别、年龄、联…

Crypto的简单应用-前后端加密传输

最近遇到一个数据脱敏处理的需求&#xff0c;想要用一种轻量级的技术实现&#xff0c;必须足够简单并且适用于所有场合如前后端加密传输、路由加密、数据脱敏等。抽时间研究了一下Crypto加密库的一些API&#xff0c;发现完全符合上述需求&#xff0c;扩展也比较容易。 1、前端加…

[C#]使用onnxruntime部署Detic检测2万1千种类别的物体

【源码地址】 github地址&#xff1a;https://github.com/facebookresearch/Detic/tree/main 【算法介绍】 Detic论文&#xff1a;https://arxiv.org/abs/2201.02605v3 项目源码&#xff1a;https://github.com/facebookresearch/Detic 在Detic论文中&#xff0c;Detic提到…

2023.12.27 关于 Redis 数据类型 List 常用命令

目录 List 类型基本概念 List 类型特点 List 操作命令 LPUSH LPUSHX RPUSH RPUSHX LRANGE LPOP RPOP LINDEX LINSERT LREM LTRIM LSET 阻塞版本的命令 阻塞版本 和 非阻塞版本的区别 BLPOP & BRPOP List 类型基本概念 Redis 中的列表&#xff08;list&am…

定时器PWM控制RGB彩灯案例

1.脉冲宽度调制PWM PWM&#xff08;Pulse Width Modulation&#xff09;简称脉宽调制&#xff0c;是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术&#xff0c;广泛应用在测量、通信、工控等方面。   PWM的一个优点是从处理器到​​ ​被控系统​​​信号…

x-cmd pkg | bit - 实验性的现代化 git CLI

目录 简介首次用户功能特点竞品和相关作品进一步探索 简介 bit&#xff0c;由 Chris Walz 于 2020 年使用 Go 语言开发&#xff0c;提供直观的命令行补全提示和建立在 git 命令之上的封装命令&#xff0c;旨在建立完全兼容 git 命令的现代化 CLI。 首次用户 使用 x bit 即可自…

flutter获取本地图片高度、宽度

/*获取本地图片宽度* */getLocalImageWidth(String path){int width;Completer<int> completer new Completer<int>();Image image Image.file(File.fromUri(Uri.parse(path)));// 预先获取图片信息image.image.resolve(new ImageConfiguration()).addListener(n…

test ui-03-cypress 入门介绍

cypress 是什么&#xff1f; 简而言之&#xff0c;Cypress 是一款专为现代Web构建的下一代前端测试工具。我们解决了开发人员和质量保证工程师在测试现代应用程序时面临的关键问题。 我们使以下操作成为可能&#xff1a; 设置测试编写测试运行测试调试测试 Cypress经常与Se…

使用宝塔在Linux面板搭建网站,并实现公网远程访问

文章目录 前言1. 环境安装2. 安装cpolar内网穿透3. 内网穿透4. 固定http地址5. 配置二级子域名6. 创建一个测试页面 前言 宝塔面板作为简单好用的服务器运维管理面板&#xff0c;它支持Linux/Windows系统&#xff0c;我们可用它来一键配置LAMP/LNMP环境、网站、数据库、FTP等&…

基于多反应堆的高并发服务器【C/C++/Reactor】(中)处理任务队列中的任务

一、处理任务队列中的任务 &#xff08;1&#xff09;EventLoop启动 EventLoop初始化和启动 // 启动反应堆模型 int eventLoopRun(struct EventLoop* evLoop) {assert(evLoop ! NULL);// 取出事件分发和检测模型struct Dispatcher* dispatcher evLoop->dispatcher;// 比较…

2024阿里云Alibaba Cloud Linux 3镜像版本大全说明

Alibaba Cloud Linux阿里云打造的Linux服务器操作系统发行版&#xff0c;Alibaba Cloud Linux完全兼容完全兼容CentOS/RHEL生态和操作方式&#xff0c;目前已经推出Alibaba Cloud Linux 3&#xff0c;阿里云百科aliyunbaike.com分享Alibaba Cloud Linux 3版本特性说明&#xff…

面试算法83:没有重复元素集合的全排列

题目 给定一个没有重复数字的集合&#xff0c;请找出它的所有全排列。例如&#xff0c;集合[1&#xff0c;2&#xff0c;3]有6个全排列&#xff0c;分别是[1&#xff0c;2&#xff0c;3]、[1&#xff0c;3&#xff0c;2]、[2&#xff0c;1&#xff0c;3]、[2&#xff0c;3&…

如何在anaconda里安装basemap和pyproj库

当直接使用conda命令进行安装basemap和pyproj库时&#xff0c;会出现版本不对应的报错问题(如下图)&#xff0c;所以此篇博客用以展示如何安装basemap和pyproj库 题主默认使用的anaconda源已经切换成了清华大学源&#xff0c;但是仍然会出现报错&#xff0c;所以不是源的问题&a…

haproxy笔记

文章目录 场景haproxy配置文档地址 场景 还得先从场景说起。 生产环境redis检查&#xff0c;发现配置的redis地址不对。 redis有3个节点。 192.168.0.1 192.168.0.2 192.168.0.3 但是配置的是 192.168.0.9 端口是16379。 好奇怪有没有&#xff0c;是不是配错了? 问了下部署大…

CMake入门教程【核心篇】函数(function)

&#x1f608;「CSDN主页」&#xff1a;传送门 &#x1f608;「Bilibil首页」&#xff1a;传送门 &#x1f608;「本文的内容」&#xff1a;CMake入门教程 &#x1f608;「动动你的小手」&#xff1a;点赞&#x1f44d;收藏⭐️评论&#x1f4dd; 文章目录 1. 函数的定义与基本…

vue3对比vue2是怎样的

一、前言 Vue 3通过引入Composition API、升级响应式系统、优化性能等一系列的改进和升级,提供了更好的开发体验和更好的性能,使得开发者能够更方便地开发出高质量的Web应用。它在Vue.js 2的基础上进行了一系列的改进和升级,以提供更好的性能、更好的开发体验和更好的扩展性…

labview 与三菱FX 小型PLC通信(OPC)

NI OPC服务器与三菱FX3U PLC通讯方法 一、新建通道名称为&#xff1a;MIT 二、选择三菱FX系列 三、确认端口号相关的参数&#xff08;COM端&#xff1a;7.波特率&#xff1a;9600&#xff0c;数据位&#xff1a;7&#xff0c;校验&#xff1a;奇校验&#xff0c;停止位&#xf…

海外住宅IP代理的工作原理和应用场景分析,新手必看

海外住宅IP代理作为一种技术解决方案&#xff0c;为用户提供了访问全球网络资源和维护隐私安全的方法。本文将介绍海外住宅IP代理的工作原理和应用场景&#xff0c;帮助读者更好地理解和利用这一技术。 一、工作原理 海外住宅IP代理的工作原理基于代理服务器和IP地址的转发。它…