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