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;
}
相关推荐
Molesidy1 分钟前
【Linux】基于Imx6ull Pro开发板和platform_device+platform_driver框架的LED驱动设计以及上机测试
linux·驱动开发
智者知已应修善业1 分钟前
【蓝桥杯龟兔赛跑】2024-2-12
c语言·c++·经验分享·笔记·算法·职场和发展·蓝桥杯
Tisfy7 分钟前
LeetCode 955.删列造序 II:模拟(O(mn)) + 提前退出
算法·leetcode·字符串·题解·遍历
im_AMBER12 分钟前
Leetcode 82 每个字符最多出现两次的最长子字符串 | 删掉一个元素以后全为 1 的最长子数组
c++·笔记·学习·算法·leetcode
java修仙传16 分钟前
力扣hot100:旋转排序数组中找目标值
算法·leetcode·职场和发展
式51618 分钟前
量子力学基础(二)狄拉克符号与复数向量空间
人工智能·算法·机器学习
我科绝伦(Huanhuan Zhou)18 分钟前
Linux系统硬件时钟与系统时钟深度解析及同步实操指南
linux·运维·服务器
k***921628 分钟前
【Linux】进程概念(六):地址空间核心机制
linux·运维·算法
xu_yule30 分钟前
算法基础-字符串哈希
算法·哈希算法·散列表
李白同学32 分钟前
Linux:调试器-gdb/cgdb使用
linux·服务器·c语言·c++