Re: [repost] Patch to make cpdup's stdout unbuffered
This is a multi-part message in MIME format.
--Multipart=_Tue__8_Jun_2004_20_07_35_-0700_vzJbZp_fP.tX.wT5
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 7bit
On Tue, 8 Jun 2004 16:23:05 -0700 (PDT)
Matthew Dillon <dillon@apollo.backplane.com> wrote:
> :Now, we could add a flag for every single program to write unbuffered
> :(linebuffered) output. Or we could do some (non-POSIX?) magic in libc
> :to get most of this just fixed by doing a env
> :LIBC_STDOUT_BUFFERING=line $program or whatever...
> :
> :opinions about this?
> :
> :cheers
> : simon
>
> Say what? No, we are not hacking up libc to turn off buffering in
> some magic way. Buffering is what you want for the vast, vast
> majority of programs that are run from the command line. We
> certainly are not going to add yet another environment variable
> that libc has to check every time a program is started up.
>
> Just add an option to cpdup that calls setvbuf() on stdout.
I'll take that as a green light to commit the previously posted cpdup
patch.
However, I think I just discovered a potential general solution. I
strongly suspected there would be a way to do it with standard BSD
mechanisms, and lo and behold there is a userland utility already set up
to exploit those mechanisms. On FreeBSD 4.9, try popen()'ing:
script -q /dev/null your_favourite_program_with_buffered_output
According to my testing, the result should be unbuffered. This is
thanks to a fairly recent MFC to script(1) which allows its stdin/out
to be something other than a terminal. I've ported the MFC - it's
attached to this e-mail - and I'd like to commit it pending review.
However, there still seem to be some small issues with combining
script(1) and popen(). Namely, when the pipe is forcefully pclose()'ed,
the script(1) process exits, but the cpdup process doesn't :( So until
that's sorted out, I'll stick with cpdup -u in the installer.
-Chris
--Multipart=_Tue__8_Jun_2004_20_07_35_-0700_vzJbZp_fP.tX.wT5
Content-Type: text/plain;
name="script.diff"
Content-Disposition: attachment;
filename="script.diff"
Content-Transfer-Encoding: base64
SW5kZXg6IHNjcmlwdC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9ob21lL2RjdnMvc3JjL3Vzci5i
aW4vc2NyaXB0L3NjcmlwdC5jLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjQKZGlmZiAtdSAtcjEu
NCBzY3JpcHQuYwotLS0gc2NyaXB0LmMJMjggTWFyIDIwMDQgMDE6MDI6NTQgLTAwMDAJMS40Cisr
KyBzY3JpcHQuYwkzMSBNYXIgMjAwNCAyMTowMzoyNyAtMDAwMApAQCAtNjIsMTIgKzYyLDE3IEBA
CiAKIHN0cnVjdAl0ZXJtaW9zIHR0OwogCit2b2xhdGlsZSBzaWdfYXRvbWljX3QJc2lndGVybWVk
ID0gMDsKK3ZvbGF0aWxlIHN0cnVjdCB0aW1ldmFsCSp0dnA7Citjb25zdCBzdHJ1Y3QgdGltZXZh
bAl0dl96ZXJvID0geyAwLCAwIH07CisKIHN0YXRpYyB2b2lkCWRvbmUoaW50KSBfX2RlYWQyOwog
c3RhdGljIHZvaWQJZG9vdXRwdXQodm9pZCk7CiBzdGF0aWMgdm9pZAlkb3NoZWxsKGNoYXIgKiop
Owogc3RhdGljIHZvaWQJZmFpbCh2b2lkKTsKIHN0YXRpYyB2b2lkCWZpbmlzaCh2b2lkKTsKIHN0
YXRpYyB2b2lkCXVzYWdlKHZvaWQpOworc3RhdGljIHZvaWQJc2lnaG5kbChpbnQpOwogCiBpbnQK
IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQpAQCAtNzYsNyArODEsNyBAQAogCXN0cnVjdCB0
ZXJtaW9zIHJ0dCwgc3R0OwogCXN0cnVjdCB3aW5zaXplIHdpbjsKIAlpbnQgYWZsZywga2ZsZywg
Y2gsIG47Ci0Jc3RydWN0IHRpbWV2YWwgdHYsICp0dnA7CisJc3RydWN0IHRpbWV2YWwgdHY7CiAJ
dGltZV90IHR2ZWMsIHN0YXJ0OwogCWNoYXIgb2J1ZltCVUZTSVpdOwogCWNoYXIgaWJ1ZltCVUZT
SVpdOwpAQCAtMTE4LDYgKzEyMywxNSBAQAogCWlmICgoZnNjcmlwdCA9IGZvcGVuKGZuYW1lLCBh
ZmxnID8gImEiIDogInciKSkgPT0gTlVMTCkKIAkJZXJyKDEsICIlcyIsIGZuYW1lKTsKIAorCWlm
IChmbHVzaHRpbWUgPiAwKQorCQl0dnAgPSAmdHY7CisJZWxzZQorCQl0dnAgPSBOVUxMOworCisJ
c2lnbmFsKFNJR0lOVCwgc2lnaG5kbCk7CisJc2lnbmFsKFNJR1RFUk0sIHNpZ2huZGwpOworCXNp
Z25hbChTSUdIVVAsIHNpZ2huZGwpOworCiAJdGNnZXRhdHRyKFNURElOX0ZJTEVOTywgJnR0KTsK
IAlpb2N0bChTVERJTl9GSUxFTk8sIFRJT0NHV0lOU1osICZ3aW4pOwogCWlmIChvcGVucHR5KCZt
YXN0ZXIsICZzbGF2ZSwgTlVMTCwgJnR0LCAmd2luKSA9PSAtMSkKQEAgLTE0MiwyMSArMTU2LDE2
IEBACiAJaWYgKGNoaWxkID09IDApCiAJCWRvc2hlbGwoYXJndik7CiAKLQlpZiAoZmx1c2h0aW1l
ID4gMCkKLQkJdHZwID0gJnR2OwotCWVsc2UKLQkJdHZwID0gTlVMTDsKLQogCXN0YXJ0ID0gdGlt
ZSgwKTsKIAlGRF9aRVJPKCZyZmQpOwogCWZvciAoOzspIHsKIAkJRkRfU0VUKG1hc3RlciwgJnJm
ZCk7CiAJCUZEX1NFVChTVERJTl9GSUxFTk8sICZyZmQpOwotCQlpZiAoZmx1c2h0aW1lID4gMCkg
ewotCQkJdHYudHZfc2VjID0gZmx1c2h0aW1lOwotCQkJdHYudHZfdXNlYyA9IDA7Ci0JCX0KLQkJ
biA9IHNlbGVjdChtYXN0ZXIgKyAxLCAmcmZkLCAwLCAwLCB0dnApOworCQl0di50dl9zZWMgPSBm
bHVzaHRpbWU7CisJCXR2LnR2X3VzZWMgPSAwOworCQluID0gc2VsZWN0KG1hc3RlciArIDEsICZy
ZmQsIDAsIDAsIChzdHJ1Y3QgdGltZXZhbCAqKXR2cCk7CisJCWlmIChzaWd0ZXJtZWQpCisJCQli
cmVhazsKIAkJaWYgKG4gPCAwICYmIGVycm5vICE9IEVJTlRSKQogCQkJYnJlYWs7CiAJCWlmIChu
ID4gMCAmJiBGRF9JU1NFVChTVERJTl9GSUxFTk8sICZyZmQpKSB7CkBAIC0yNjIsMyArMjcxLDE0
IEBACiAJY2xvc2UobWFzdGVyKTsKIAlleGl0KGVubyk7CiB9CisKK3ZvaWQgc2lnaG5kbChpbnQg
c2lnbm8pCit7CisJc2lndGVybWVkID0gc2lnbm87CisJLyoKKwkgKiBUaGUgZm9sbG93aW5nIGlz
IHRvIGF2b2lkIGEgcmFjZSBjb25kaXRpb24uICBJbiBjYXNlIGEKKwkgKiBzaWduYWwgYXJyaXZl
cyBqdXN0IGJlZm9yZSB0aGUgc2VsZWN0KCksIGZvcmNlIHRoZSB0aW1lb3V0CisJICogdG8gMCB0
byBlbnN1cmUgYW4gaW1tZWRpYXRlIGV4aXQuCisJICovCisJdHZwID0gKHZvbGF0aWxlIHN0cnVj
dCB0aW1ldmFsICopJnR2X3plcm87Cit9Cg==
--Multipart=_Tue__8_Jun_2004_20_07_35_-0700_vzJbZp_fP.tX.wT5--
討論串 (同標題文章)
完整討論串 (本文為第 7 之 9 篇):