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;
}
相关推荐
龙山云仓23 分钟前
No131:AI中国故事-对话荀子——性恶论与AI约束:礼法并用、化性起伪与算法治理
大数据·人工智能·深度学习·算法·机器学习
JoyCong199824 分钟前
高效远程协作指南:基于ToDesk的六大应用场景详解
运维·服务器·远程工作·远程操作
夏鹏今天学习了吗31 分钟前
【LeetCode热题100(90/100)】编辑距离
算法·leetcode·职场和发展
芒克芒克1 小时前
数组去重进阶:一次遍历实现最多保留指定个数重复元素(O(n)时间+O(1)空间)
数据结构·算法
星火开发设计1 小时前
二维数组:矩阵存储与多维数组的内存布局
开发语言·c++·人工智能·算法·矩阵·函数·知识
三不原则1 小时前
实战:混沌工程入门,模拟服务器宕机的故障演练
运维·kubernetes·chaos mesh
cws2004012 小时前
MFA双因素用户使用手册
运维·windows·网络安全·github·邮件·邮箱
颜子鱼2 小时前
Linux驱动-INPUT子系统
linux·c语言·驱动开发
丨康有为丨2 小时前
算法时间复杂度和空间复杂度
算法
HarmonLTS2 小时前
Python人工智能深度开发:技术体系、核心实践与工程化落地
开发语言·人工智能·python·算法