当前位置: 首页 > article >正文

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

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

 

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


http://www.kler.cn/a/454564.html

相关文章:

  • Ubuntu离线安装Docker容器
  • python递归最多多少层
  • 接口测试Day03-postman断言关联
  • MySql详细教程-从入门到进阶(超实用)
  • C#连接SQLite数据库并实现基本操作
  • 初始 ShellJS:一个 Node.js 命令行工具集合
  • 让 AMD GPU 在大语言模型推理中崭露头角:机遇与挑战
  • Unity如何判断Animator当前播放的动画已经结束
  • Go的Slice如何扩容
  • 游戏引擎学习第57天
  • 「下载」5G智慧园区整体解决方案:架构IOC核心平台层,信息全面集成共享
  • uni-app使用web-view遇到的问题
  • vxe-table 实现跨行按钮同时控制两行的编辑状态
  • Flink CDC MySQL 同步数据到 Kafka实践中可能遇到的问题
  • SpringBoot揭秘:URL与HTTP方法如何定位到Controller
  • Excel中一次查询返回多列
  • golang实现生产者消费者模式
  • 随机变量是一个函数-如何理解
  • 【MySQL】踩坑笔记——保存带有换行符等特殊字符的数据,需要进行转义保存
  • 算法题(17):删除有序数组中的重复项
  • k8s coredns
  • 简单发布一个npm包
  • Ubuntu 24.04.1 LTS 配置静态固定IP地址
  • 计算机专业文献检索期末论文
  • 计算机网络——期末复习(3)4-6章考试重点
  • 零基础微信小程序开发——页面导航之编程式导航(保姆级教程+超详细)