unix高级编程-fork之后父子进程共享文件

news2024/10/7 10:13:49

~/.bash_profile:每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件.
这里我看到的是centos的操作,但我用的是debian系的ubuntu,百度了一下发现debian的在这里

在这里插入图片描述我们进文件看下
在这里插入图片描述这里执行的是.bashrc这个文件
这里可以吧系统编码改成可以识别中文的
export LC_ALL=zh_CN.UTF8
export LANG=$LC_ALL
在这里插入图片描述大家可以自行修改想要的编码,修改完重新执行一下用户文件,或者重启,或者重新登陆都是可以的

文件共享
我们要用open函数
我们这里用man查看手册
linux自带的工具 man 手册
man 1 是普通shell 的命令 比如 ls
man 2 是系统 调用函数 open write 说明
比如 查看 open 函数 :man 2 open
我们把包含的库文件粘贴上去
在这里插入图片描述open打开文件参数
在这里插入图片描述

我们放两个参数就可以了,第一个是文件指针(打开文件的路径),flags我们查看man手册,我们取O_RDWR读写属性
在这里插入图片描述

注意这里的文件流返回值int
我们再看下状态码
-1就是出错的
在这里插入图片描述

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

int main(void)
{    
    int fd;
    fd = open("./1.txt",O_RDWR);
    if(fd == -1)
    {
         printf("打开文件失败!\n");
         return -1;       
    }
    else{
        printf("打开文件成功\n");    
    }

    return 0;
    
}

在这里插入图片描述可以发现这里报错了
这里是因为open文件并不能创建
我们创建文件然后运行
在这里插入图片描述
write函数写入

#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <signal.h>
#include <errno.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/wait.h>
int main(void)
{    
    int fd;
    fd = open("./1.txt",O_RDWR);
    if(fd == -1)
    {
         printf("打开文件失败!\n");
         return -1;       
    }
    else{
        printf("打开文件成功\n");    
    }
    pid_t pid;
    pid = fork();
    if(pid == -1)
    {    
        printf("pid<0 err.\n");
        return -1;
    }
    else if(pid == 0)
    {    
        printf("child:%d,parent:%d\n",getpid(),getppid());
        write(fd,"parent",6);   
                 
    }
    else if(pid > 0){
        write(fd,"child",5);
        printf("Parent Process id: %d\n",getpid());


        wait(NULL); //等待子进程结束,再返回,()里面参数一般是空指针
      }
    return 0;
    
}

执行完毕在这里插入图片描述我们可以看到两个进程都向这个文件写入数据了
在这里插入图片描述我们用for语句多写入几行

#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <signal.h>
#include <errno.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/wait.h>
int main(void)
{    
    int fd;
    fd = open("./1.txt",O_RDWR);
    if(fd == -1)
    {
         printf("打开文件失败!\n");
         return -1;       
    }
    else{
        printf("打开文件成功\n");    
    }
    pid_t pid;
    pid = fork();
    if(pid == -1)
    {    
        printf("pid<0 err.\n");
        return -1;
    }
    else if(pid == 0)
    {    
        for(int i =0 ;i<1000;i++){
            write(fd,"parent  ",8);    
        }  
        printf("child:%d,parent:%d\n",getpid(),getppid());
        write(fd,"parent",6);   
        close(fd);         
    }
    else if(pid > 0){
        for(int i =0 ;i<1000;i++){
            write(fd,"child  ",7);    
        }        
        printf("Parent Process id: %d\n",getpid());


        wait(NULL); //等待子进程结束,再返回,()里面参数一般是空指针
      }
    close(fd);
    return 0;
    
}

可以看到并发执行写入的顺序不可控,且是共享的
在这里插入图片描述注意这里又两个写入流子进程和父进程都需要close(fd)

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

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

相关文章

【数据挖掘实战】——基于水色图像的水质评价

项目地址&#xff1a;Datamining_project: 数据挖掘实战项目代码 目录 一、背景和挖掘目标 1、问题背景 2、水色分类 3、原始数据 4、挖掘目标 二、分析方法和过程 1、初步分析 2、总体流程 第1步&#xff1a;数据预处理——图像切割 第2步&#xff1a;特征提取 ​…

健身蓝牙耳机推荐,推荐五款适合健身的蓝牙耳机

出门运动健身&#xff0c;有音乐的陪伴是我们坚持运动的不懈动力&#xff0c;在健身当中佩戴的耳机&#xff0c;佩戴舒适度以及牢固程度是我们十分需要注意的&#xff0c;还不知道如何选择健身蓝牙耳机&#xff0c;可以看看下面这些运动蓝牙耳机分享。 1、南卡Runner Pro4骨传…

大bug!ChatGPT居然不懂最新的量子计算?

&#xff08;图片来源&#xff1a;网络&#xff09;近期&#xff0c;背靠微软的AI语言模型ChatGPT风靡全网&#xff0c;以社交媒体为传播媒介&#xff0c;仅5天&#xff0c;注册用户数就超过100万&#xff0c;2个月破亿。随后谷歌眼红不已&#xff0c;匆忙召开自研AI搜索工具Ba…

【Python】变量类型,赋值+多个变量赋值

嗨害大家好鸭~我是小熊猫(✿◡‿◡) 好像还有一些小伙伴还不是很会python的基础鸭~ 没关系啦~这不是还有我小熊猫嘛 ~ 源码资料电子书:点击此处跳转文末名片获取 Python 变量类型 变量是存储在内存中的值&#xff0c; 这就意味着在创建变量时会在内存中开辟一个空间。 基于…

java面试题-JUC集合类

ConcurrentHashMap1.为什么HashTable慢? 它的并发度是什么? 那么ConcurrentHashMap并发度是什么?首先&#xff0c;HashTable 是一种线程安全的哈希表&#xff0c;它内部使用的是同步锁来保证线程安全。在并发读写的场景下&#xff0c;同步锁会导致线程的阻塞&#xff0c;从而…

Linux 软件包安装

目录 通过源代码编译安装 通过RPM软件包安装 通过Yum软件仓库安装 配置本地Yum源 通过yum安装软件 通过Dnf软件仓库安装 Linux软件包安装有四种方式&#xff1a;源代码、RPM、Yum、Dnf安装四种方式 通过源代码编译安装 通过源代码编译安装可以根据需求定制软件&#xff…

Prefect 工作流中修改ray的地址

事情的起因 prefect 默认创建ray在127.0.0.1 上&#xff0c;我想在外网访问&#xff0c;想修改为0.0.0.0 尝试解决思路1&#xff08;可行&#xff09; 自己本地安装一个ray&#xff0c;但是连接不了redis重新安装redis&#xff0c;使用docker安装的docker 安装需要将redis.…

数据结构-算法的空间复杂度(1.2)

目录 1.空间复杂度 1.1 例子 1.2 空间的特殊性质 写在最后&#xff1a; 1.空间复杂度 空间复杂度也是一个数学表达式&#xff0c; 是对一个算法在运行过程中临时占用存储空间大小的量度。 他也是用大O渐进表示法。 1.1 例子 例1&#xff1a; 冒泡排序&#xff1a; v…

【C语言进阶】字符串函数与内存函数的学习与模拟实现

​ ​&#x1f4dd;个人主页&#xff1a;Sherry的成长之路 &#x1f3e0;学习社区&#xff1a;Sherry的成长之路&#xff08;个人社区&#xff09; &#x1f4d6;专栏链接&#xff1a;C语言进阶 &#x1f3af;长路漫漫浩浩&#xff0c;万事皆有期待 文章目录1.字符串处理函数介…

【设计模式】对象行为型模式

行为创建型模式 系列综述&#xff1a; 来源&#xff1a;该系列是主要参考《大话设计模式》和《设计模式(可复用面向对象软件的基础)》&#xff0c;其他详细知识点拷验来自于各大平台大佬的博客。 总结&#xff1a;汇总篇 如果对你有用&#xff0c;希望关注点赞收藏一波。 文章目…

【超分顶会详解+部署】ESRT:Transformer for Single Image Super-Resolution

文章目录ESRT1. 超分基本知识1.1 SRF1.2 xxx_img1.3 裁剪1.4 超分模型评估标准2. LCB、LTB 模块2.1 序列模型3. 损失函数4. 部署运行4.1 数据集4.1.1 训练集4.1.2 验证集4.1.3 测试集4.2 数据集转换4.3 训练4.4 测试4.5 效果ESRT ESRT&#xff08;Efficient Super-Resolution …

直播预告 | 企业如何轻松完成数据治理?火山引擎 DataLeap 给你一份实战攻略!

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 企业数字化转型正席卷全球&#xff0c;这不仅是趋势所在&#xff0c;也是企业发展必然面对的考题&#xff0c;也是企业最关心、最难决策的难题&#xff0c;数字化不…

C/C++每日一练(20230222)

目录 1. 部分复制字符串(★) 2. 按字典顺序排列问题(★★) 3. 地下城游戏(★★★) 附录 动态规划 1. 部分复制字符串 将字符串2小写字母复制到字符串1&#xff1a;编写程序,输入字符串s2,将其中所有小写字母复制到字符串数组strl中。例如&#xff1a;aal1bb22cc33de4AA55…

简历上面的项目经历怎么写?怎么写才能显得突出?

项目经历可不可以是课堂项目? 其实对很多同学来说,不是不会写项目经历,而是根本不知道什么是项目经历,哪些内容可以写在项目经历中。所以看到简历中的项目经历模块,感觉不知道怎么写?那么对于大学生来说,即使你大学四年中没有太多活动、竞赛、科研的经历,但是你一定上过…

Leetcode力扣秋招刷题路-0088

从0开始的秋招刷题路&#xff0c;记录下所刷每道题的题解&#xff0c;帮助自己回顾总结 88. 合并两个有序数组 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2&#xff0c;另有两个整数 m 和 n &#xff0c;分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 …

学术贴 | FPGA 加速图数据库查询执行

导读本篇博客主要讲解发布于 Microprocessors and Microsystems 的文章《Semi-static Operator Graphs for Accelerated Query Execution on FPGAs》&#xff0c;介绍它所提出的算法与试验结果&#xff0c;并结合实际情况给出一些思考。一、背景介绍在当今的数据化场景越来越丰…

【11】FreeRTOS的延时函数

目录1.延时函数-介绍2.相对延时函数-解析2.1函数prvAddCurrentTaskToDelayedList-解析2.3滴答定时器中断服务函数xPortSysTickHandler()-解析2.4函数taskSWITCH_DELAYED_LISTS() -解析3.延时函数-实验4.总结1.延时函数-介绍 函数描述vTaskDelay()相对延时xTaskDelayUntil()绝对…

linux集群技术(三)--七层负载均衡-HAproxy(一)

HAproxy 概述HAproxy 特点案例1案例2-HAproxy动静分离 1.HAproxy 概述 1.1 关于4/7层负载均衡 1. 无负载平衡&#xff1a; 没有负载平衡的简单Web应用程序环境可能如下所示 在此示例中&#xff0c;用户直接连接到您的Web服务器&#xff0c;在yourdomain.com上&#xff0c;…

2023年,如何自学通过PMP?(含pmp资料)

自学需要解决的问题&#xff1a; 自学的难度很大&#xff0c;不管是零基础还是项目管理经验丰富&#xff0c;都要明白两个点&#xff1a; 1、复杂的报考流程&#xff1b; 2、学习毅力&#xff08;通过率&#xff09;。 第一点、复杂的考试流程 考试先英文报名&#xff0c;英文…

Apache DolphinScheduler 助力 Trino 快速实现湖仓一体数据建设

点亮 ⭐️ Star 照亮开源之路https://github.com/apache/dolphinscheduler作者 | 钟嘉杰 Apache DolphinScheduler PMCMember// 在面对联合查询和湖仓一体场景时&#xff0c;Trino 已经是不少开发者的不二之选。Trino 是一个查询引擎&#xff0c;在数仓、即席查询方面非常强大…