进程间文件的共享

参考博客:https://blog.csdn.net/The_perfect_world/article/details/89296171
当一个进程fork之后,整个进程表项被复制,包括所有的文件描述符。
但是文件表项并不会被复制。父进程和子进程共享相同的文件表项。
注意:文件的偏移量是储存在文件表项中,所以当一个进程读取了文件之后,另一个进程读取相同的文件会从上一个进程停止的地方开始读取。
在这里插入图片描述
兄弟进程示例

#include <stdio.h> 
#include <string.h> 
#include <unistd.h> 
#include <sys/types.h> 
#include <error.h> 
#include <errno.h> 
#include <sys/socket.h> 
#include <stdlib.h> 

pid_t parent_pid;
pid_t chi1_pid;
pid_t chi2_pid;
 
int main(int argc, char* argv[]){
    char buf[128] = {0};
	pid_t pid;
	FILE *fp;
    fp = fopen ("demo.txt", "w+");
	int i;

	parent_pid = getpid();
	printf("Father, pid is %d\n", parent_pid);

    pid = fork();
    if(pid < 0) {
        printf("Father, Error, fork failed, errno(%d): %s\n", errno, strerror(errno));
        return EXIT_FAILURE;
    } else if(pid > 0) {
		//父进程
        printf("Father, create Child1 (pid: %d)\n", pid);
		chi1_pid = pid;
    } else if(pid == 0) {
		sleep(1);
		printf("Child1, before write\n");
		for (i = 0; i < 100000000; i++) {
			fprintf(fp, "%d ", 2*i);
			sleep(5);
		}
		printf("Child1, after wrie\n");
    }

	if (getpid() == parent_pid) {
		pid = fork();
		if(pid < 0) {
			printf("Father, Error, fork failed, errno(%d): %s\n", errno, strerror(errno));
			return EXIT_FAILURE;
		} else if(pid > 0) {
			//父进程
			printf("Father, create Child2 (pid: %d)\n", pid);
			chi2_pid = pid;
		} else if(pid == 0) {
			sleep(1);
			printf("Child2, before write\n");
			for (i = 0; i < 100000000; i++) {
				fprintf(fp, "%d ", 2*i+1);
				sleep(5);
			}
			printf("Child2, after wrie\n");
		}
	}

	if (getpid() == parent_pid) {
        sleep(510000000);
		fprintf(fp, "\n");
		fclose(fd);
	}

    return EXIT_SUCCESS;    
}

父子进程示例
待补充

おすすめ

転載: blog.csdn.net/wangkai6666/article/details/118560949
おすすめ