name pipe problem: 1 writer, multiple concurrent readers
Morten Kjærulff
mortenkjarulff@gmail.com
Tue May 19 11:26:44 GMT 2020
Hi,
The following script:
#!/bin/sh
rm -f t.pip t.txt
mkfifo t.pip
printf "line1\nline2\n" >t.txt
ps
{
while true ; do
cp t.txt t.pip
done
} &
rm -f t.rc.*
for rc in 0 1 2 3 4 5 6 7 8 9 ; do
{
diff t.pip t.txt
echo $? >t.rc.$rc
}
done
echo result1 start
ls t.rc.* | wc -l
cat t.rc.*
echo result1 end
rm -f t.rc.*
for rc in 0 1 2 3 4 5 6 7 8 9 ; do
{
diff t.pip t.txt
echo $? >t.rc.$rc
} & # run the readers in parallel
done
sleep 10
echo result2 start
ls t.rc.* | wc -l
cat t.rc.*
echo result2 end
ps
Give me output like this:
$ ./tpip.sh
PID PPID PGID WINPID TTY UID STIME COMMAND
1642 1600 1642 65264 cons1 1058872 13:18:58 /usr/bin/sh
1600 1 1600 72728 cons1 1058872 13:18:33 /usr/bin/bash
1645 1642 1642 42088 cons1 1058872 13:18:58 /usr/bin/ps
result1 start
10
0
0
0
0
0
0
0
0
0
0
result1 end
0a1,2
> line1
> line2
diff: t.pip
result2 start
1
2
result2 end
PID PPID PGID WINPID TTY UID STIME COMMAND
1690 1688 1642 104032 cons1 1058872 13:19:01 /usr/bin/diff
1681 1642 1642 95012 cons1 1058872 13:19:00 /usr/bin/sh
1642 1600 1642 65264 cons1 1058872 13:18:58 /usr/bin/sh
1684 1681 1642 99624 cons1 1058872 13:19:00 /usr/bin/diff
1678 1676 1642 94532 cons1 1058872 13:19:00 /usr/bin/diff
1688 1642 1642 88864 cons1 1058872 13:19:01 /usr/bin/sh
1698 1642 1642 104820 cons1 1058872 13:19:11 /usr/bin/ps
1692 1642 1642 66572 cons1 1058872 13:19:01 /usr/bin/sh
1677 1674 1642 86692 cons1 1058872 13:19:00 /usr/bin/diff
1646 1642 1642 30888 cons1 1058872 13:18:58 /usr/bin/sh
1600 1 1600 72728 cons1 1058872 13:18:33 /usr/bin/bash
1686 1685 1642 14320 cons1 1058872 13:19:01 /usr/bin/diff
1685 1642 1642 25608 cons1 1058872 13:19:00 /usr/bin/sh
1676 1642 1642 104212 cons1 1058872 13:19:00 /usr/bin/sh
1689 1642 1642 98004 cons1 1058872 13:19:01 /usr/bin/sh
1674 1642 1642 44152 cons1 1058872 13:19:00 /usr/bin/sh
1680 1646 1642 28224 cons1 1058872 13:19:00 /usr/bin/cp
1682 1679 1642 43612 cons1 1058872 13:19:00 /usr/bin/diff
1694 1692 1642 67736 cons1 1058872 13:19:01 /usr/bin/diff
1683 1642 1642 93544 cons1 1058872 13:19:00 /usr/bin/sh
1679 1642 1642 90188 cons1 1058872 13:19:00 /usr/bin/sh
1691 1689 1642 68560 cons1 1058872 13:19:01 /usr/bin/diff
1687 1683 1642 83952 cons1 1058872 13:19:01 /usr/bin/diff
$
That is, when I run the readers in sequence, no problem, but when I
run the in parallel, they either hang or t.pip seems empty.
Is this as expected?
My final goal is to have my .netrc file encrypted. t.pip would be
.netrc and t.txt would be the encrypted one. If I can get to my goal
another way, feel free to give me the idea.
/Morten
More information about the Cygwin
mailing list