Linux-----进程处理(文件IO资源使用)

下面代码是通过父进程和子进程对同一个文件IO资源进行操作,父进程和子进程都对这个进程进行写入操作,我们都知道这两个进程实际上是并发的,所以需要一个同步机制来去操作同一个资源(后面再深入去说明同步的api,这里使用延时就可以解决了),解释如下:

cpp 复制代码
#include <sys/stat.h>
#include <stdio.h>
#include <stdlib.h> 
#include <unistd.h>
#include <fcntl.h>
#include <string.h>

int main(int argc, char const* argv[])
{
    int fd = open("./io.txt", O_CREAT | O_WRONLY | O_APPEND, 0644);

    if (fd == -1) {
        perror("open");
        exit(EXIT_FAILURE);
    }

    char buffer[1024]; // 文件读取缓冲区


    pid_t pid = fork();

    if (pid < 0) {
        perror("fork");
        exit(EXIT_FAILURE);
    }

    // 子进程
    else if (pid==0){
        strcpy(buffer, "这是子进程写入的数据\n");
    }
    // 父进程
    else {
        sleep(1);
        strcpy(buffer, "这是父进程写入的数据\n");
    }
    // 父子进都执行的代码
    ssize_t byte_wirte = write(fd, buffer, strlen(buffer));

    if (byte_wirte == -1) {
        perror("write");
        close(fd);
        exit(EXIT_FAILURE);
    }

    // 使用完毕资源后关闭
    
    printf("写入数据成功\n");
    close(fd);

    if (pid == 0) {
        printf("子进程写入完毕\n");
        
    }
    else {
        printf("父进程写入完毕\n");
        // close(fd);
    }

    return 0;
}
相关推荐
JZC_xiaozhong1 小时前
数据不互通、审批慢?企业多系统智能协同与流程自动化解决方案
运维·自动化·流程管理·流程自动化·数据集成与应用集成·流程监控·流程可视化设计
爱学习的小囧1 小时前
ESXi 8.0 原生支持 NVMe 固态硬盘吗?VMD 配置详解教程
linux·运维·服务器·esxi·esxi8.0
坚持就完事了2 小时前
Linux中的变量
linux·运维·服务器
hERS EOUS2 小时前
nginx 代理 redis
运维·redis·nginx
handler012 小时前
从源码到二进制:深度拆解 Linux 下 C 程序的编译与链接全流程
linux·c语言·开发语言·c++·笔记·学习
Cat_Rocky2 小时前
利用Packet Tracer网络实验
linux·运维·服务器
嵌入式×边缘AI:打怪升级日志2 小时前
Linux 驱动实战:SR501 人体红外传感器驱动开发与调试全记录
linux·运维·驱动开发
正点原子3 小时前
【正点原子Linux连载】第三章 U-Boot使用 摘自【正点原子】ATK-DLRK3568嵌入式Linux驱动开发指南
linux·运维·驱动开发
Qbw20043 小时前
【Linux】进程地址空间
linux·c++