下面代码是通过父进程和子进程对同一个文件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;
}