import socket import os import sys import struct import time s = socket.socketpair(socket.AF_UNIX, socket.SOCK_SEQPACKET) pid = os.fork() if pid == -1: print("fork() failed!") sys.exit() if pid == 0: msg = b'test' print("parent: hello") s[1].close() ipc = s[0] f = open("/etc/passwd", "r") tmp = struct.pack("i", f.fileno()); print("parent: sending message", msg, tmp) ret = ipc.sendmsg(msg, [(socket.SOL_SOCKET, socket.SCM_RIGHTS, tmp)], 0) print("parent:", ret) f.close() else: print("child: hello") s[0].close() ipc = s[1] ret = ipc.recvmsg(10, 1000, 0) print("child:", ret) print("child: received message:", ret[0]) f = os.fdopen(struct.unpack("i", ret[1][0][2])[0]) arr = f.readlines() for i in arr: print("Read:", i, end='') f.close()