Вы не отправили свой исходный код, но кажется, что вы вызываете mmap()
, чтобы получить данные, которые хотите записать.
Я предполагаю, что вы сопоставили область файла, которая не предоставляет вам доступа для чтения.
Чтобы убедиться, что проблема не вызвана побочным эффектом с mmap()
, вы должны позвонить
dd if=filename of=/dev/null
, чтобы проверить, существует ли проблема, когда вы определенно читаете только из исходного файла.
«Общее подключение к Интернету» не очень точно -определено. В принципе, вы можете «поделиться» своим «подключением к Интернету», просто включив маршрутизацию (, если она еще не включена ), и вручную настроив подключение к локальной сети на «совместно используемом ПК» и «другом ПК». Вам даже не нужен NAT.
А еще есть варианты запуска точки доступа WLAN и т.д. и т.п.
Тем не менее, вот скрипт, который я использую в своей системе systemd -и Networkmanages -less Devuan для NAT интерфейса, который может быть или не быть тем, что вы подразумеваете под «совместным доступом к интернету»:
#!/bin/bash
# masquerade $1 (e.g. eth0, ppp0) as $2 (default wlan0)
INTIF="$1"
EXTIF=${2:-wlan0}
echo $INTIF $EXTIF
modprobe nf_conntrack
modprobe nf_conntrack_ipv4
modprobe nf_nat
modprobe iptable_nat
echo "1" > /proc/sys/net/ipv4/ip_forward
echo "1" > /proc/sys/net/ipv4/ip_dynaddr
iptables -P INPUT ACCEPT
iptables -F INPUT
iptables -P OUTPUT ACCEPT
iptables -F OUTPUT
iptables -P FORWARD DROP
iptables -F FORWARD
iptables -t nat -F
iptables -A FORWARD -i $EXTIF -o $INTIF -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i $INTIF -o $EXTIF -j ACCEPT
iptables -t nat -A POSTROUTING -o $EXTIF -j MASQUERADE
Некоторые вещи в этом скрипте не являются строго необходимыми, но я нахожу их удобными.
Если мне нужно запустить DHCP-сервер, я обычно запускаю dhcpd
, предварительно настроив файл конфигурации.