Re: [repost] Patch to make cpdup's stdout unbuffered

看板DFBSD_submit作者時間21年前 (2004/06/09 19:32), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串7/9 (看更多)
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--
文章代碼(AID): #10nlKt00 (DFBSD_submit)
討論串 (同標題文章)
文章代碼(AID): #10nlKt00 (DFBSD_submit)