【elfboard linux开发板】4. 文件点灯与创建多进程

这篇具有很好参考价值的文章主要介绍了【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;
}

【elfboard linux开发板】4. 文件点灯与创建多进程,linux
【elfboard linux开发板】4. 文件点灯与创建多进程,linux

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

编译发送同前;
效果:【elfboard linux开发板】4. 文件点灯与创建多进程,linux文章来源地址https://www.toymoban.com/news/detail-774906.html

到了这里,关于【elfboard linux开发板】4. 文件点灯与创建多进程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Linux进程控制】进程创建 | 进程终止 | 进程等待 | 进程替换

    【写在前面】 本文主要学习理解 fork 的返回值、写时拷贝的工作细节、为什么要存在写时拷贝;进程退出码、进程退出的场景及常见的退出方法、对比 man 2 _exit 和 man 3 exit;进程终止、操作系统怎么进行释放资源、池的概念;进程等待的价值、进程等待的方法 wait 和 waitpid

    2023年04月08日
    浏览(38)
  • 【Linux初阶】fork进程创建 & 进程终止 & 进程等待

     🌟hello,各位读者大大们你们好呀🌟 🍭🍭系列专栏:【Linux初阶】 ✒️✒️本篇内容:fork进程创建,理解fork返回值和常规用法,进程终止(退出码、退出场景、退出方法、exit),进程等待(wait、waitpid),阻塞等待和非阻塞等待 🚢🚢作者简介:本科在读,计算机海洋

    2024年02月06日
    浏览(52)
  • linux入门之进程控制(上)进程创建,进程等待

    目录 一、进程创建 1.fork函数 2.fork函数返回值 3.写时拷贝 4.fork常规用法 5.fork调用失败原因 二、进程终止 1.进程退出场景 2.进程常见退出方法 2.1_exit函数(直接调用内核) 2.2 exit函数 2.3return退出 三、进程等待 1.进程等待必要性 2.进程等待方法 2.1 wait方法 2.2 waitpid方法 2.3获取

    2024年02月12日
    浏览(56)
  • 【Linux从入门到放弃】进程概念、查看进程、创建进程

    🧑‍💻作者: @情话0.0 📝专栏:《Linux从入门到放弃》 👦个人简介:一名双非编程菜鸟,在这里分享自己的编程学习笔记,欢迎大家的指正与点赞,谢谢!   那在还没有学习进程之前,就问大家,操作系统是怎么管理进行进程管理的呢?很简单,先把进程描述起来,再

    2024年02月12日
    浏览(43)
  • 【Linux】Linux进程控制 --- 进程创建、终止、等待、替换、shell派生子进程的理解…

    柴犬: 你好啊,屏幕前的大帅哥or大美女,和我一起享受美好的今天叭😃😃😃 1. 在调用fork函数之后, 当执行的程序代码转移到内核中的fork代码后 ,内核需要分配 新的内存块 和 内核数据结构 给子进程, 内核数据结构包括PCB、mm_struct和页表,然后构建起映射关系 ,同时

    2024年01月16日
    浏览(58)
  • 【Linux】如何创建进程?

           🔥🔥 欢迎来到小林的博客!!       🛰️博客主页:✈️林 子       🛰️博客专栏:✈️ 小林的Linux之路       🛰️社区 :✈️ 进步学堂       🛰️欢迎关注:👍点赞🙌收藏✍️留言 fork函数是一个系统调用接口,我们可以

    2024年02月04日
    浏览(28)
  • 【Linux】进程创建

    在linux中fork函数时非常重要的函数,它从已存在进程中创建一个新进程。新进程为子进程,而原进程为父进程。 进程调用fork,当控制转移到内核中的fork代码后,内核做: 分配新的内存块和内核数据结构给子进程 将父进程部分数据结构内容拷贝至子进程 添加子进程到系统进程

    2024年02月06日
    浏览(36)
  • 【Linux】进程控制(创建、终止、等待)

    环境:centos7.6,腾讯云服务器 Linux文章都放在了专栏:【 Linux 】欢迎支持订阅 相关文章推荐: 【Linux】冯.诺依曼体系结构与操作系统 【Linux】进程理解与学习Ⅰ-进程概念 【Linux】进程理解与学习Ⅱ-进程状态 【Linux】进程理解与学习Ⅲ-环境变量 【Linux】进程理解与学习Ⅳ

    2023年04月16日
    浏览(60)
  • Linux进程控制【创建、终止、等待】

    ✨个人主页: Yohifo 🎉所属专栏: Linux学习之旅 🎊每篇一句: 图片来源 🎃操作环境: CentOS 7.6 阿里云远程服务器 Good judgment comes from experience, and a lot of that comes from bad judgment. 好的判断力来自经验,其中很多来自糟糕的判断力。 进程 创建后,需要对其进行合理管理,光靠

    2024年02月02日
    浏览(66)
  • 【Linux初阶】进程的相关概念 | 进程管理 & 查看进程 & 获取进程标识符 & fork进程创建

     🌟hello,各位读者大大们你们好呀🌟 🍭🍭系列专栏:【Linux初阶】 ✒️✒️本篇内容:进程的概念,进程管理初识(描述、管理进程),查看进程的基础方法,获取进程标识符(pid、ppid),fork进程创建(分流应用) 🚢🚢作者简介:计算机海洋的新进船长一枚,请多多

    2023年04月27日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包