digitalmars.D.learn - Need to 'write' exactly
- Nick Sabalausky (8/8) Sep 12 2010 I'm outputting some stuff to stdout with the write* functions, but with ...
- Andrej Mitrovic (11/19) Sep 12 2010 Have you tried using rawWrite ? There's a unittest in the definition
- Nick Sabalausky (20/30) Sep 12 2010 Leave it to me to overlook the obvious :) This seems to work:
I'm outputting some stuff to stdout with the write* functions, but with what I'm doing at the moment I need complete control over each byte that gets output. On windows, write auto-converts \n to \r\n, which is normally good, but this time I need to get around that and output it just as-is. How can I do that? Is there a lower level function that's guaranteed not to interact poorly with write (ie, no potential for any weird buffering-race issues)? Also, are there any other situations where any of the write functions might alter the specific bytes passed in?
Sep 12 2010
Have you tried using rawWrite ? There's a unittest in the definition which looks like something you need: unittest { auto f = File("deleteme", "w"); scope(exit) std.file.remove("deleteme"); f.rawWrite("\r\n\n\r\n"); f.close(); assert(std.file.read("deleteme") == "\r\n\n\r\n"); } On Sun, Sep 12, 2010 at 10:07 PM, Nick Sabalausky <a a.a> wrote:I'm outputting some stuff to stdout with the write* functions, but with what I'm doing at the moment I need complete control over each byte that gets output. On windows, write auto-converts \n to \r\n, which is normally good, but this time I need to get around that and output it just as-is. How can I do that? Is there a lower level function that's guaranteed not to interact poorly with write (ie, no potential for any weird buffering-race issues)? Also, are there any other situations where any of the write functions might alter the specific bytes passed in?
Sep 12 2010
"Andrej Mitrovic" <andrej.mitrovich gmail.com> wrote in message news:mailman.179.1284322385.858.digitalmars-d-learn puremagic.com...Have you tried using rawWrite ? There's a unittest in the definition which looks like something you need: unittest { auto f = File("deleteme", "w"); scope(exit) std.file.remove("deleteme"); f.rawWrite("\r\n\n\r\n"); f.close(); assert(std.file.read("deleteme") == "\r\n\n\r\n"); }Leave it to me to overlook the obvious :) This seems to work: ------------------------------------------------- import std.stdio; import std.string; void main() { // Writes "A\rB\r\nC" on windows //write("A\rB\nC"); // Writes "A\rB\nC" stdout.rawWrite("A\rB\nC"); // format doesn't mess it up either, which is good stdout.rawWrite("A\rB\nC".format()); stdout.rawWrite("%s".format("A\rB\nC")); } ------------------------------------------------- That wouldn't potentially interfere with any sort of buffering in write*, would it? I assume any buffering would be at or below the "stdout" level, rather than in the "write*" functions, but figure I should ask.
Sep 12 2010