X-Recipient: archive-cygwin AT delorie DOT com DomainKey-Signature: a=rsa-sha1; c=nofws; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:mime-version:message-id:from:to:subject :content-type:date; q=dns; s=default; b=pDMWCX7FEoEnaUEwX+SMB+Q5 SicrFdPUdV3PqCkIJJPCINRYRJMowf3lKmGfgsPMUCb6OeIPipWk7SDZqw/yBHbF zRG2PUlOMdt3IBPYo3oT00WP9h1mbd07z8ljAFjj85fmCN6BjDeFEfnZKryfJW0z 0GUEne28mBGdHtJhGu0= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:mime-version:message-id:from:to:subject :content-type:date; s=default; bh=WYGNUZe2trx5kqvrKpWzGVFhPJc=; b= uJKPV9/e0Dtg9v6F3ZPlvNJ3MW+WKf39cz9JGXm7vC2fPBf0vqmA3UvGXvkVmaww +EvEM/SRVCrgqo+3E0A82QAj48rpEfKI2+a++s6yE5oc5MzkO9IZDrMuWUOsP4a8 uDrakRtTnxGCUiITLkZLJb4oFnhJ5EAkRV05WdSrx/Q= Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner AT cygwin DOT com Mail-Followup-To: cygwin AT cygwin DOT com Delivered-To: mailing list cygwin AT cygwin DOT com Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=0.6 required=5.0 tests=AWL,BAYES_00,FREEMAIL_FROM,RCVD_IN_DNSWL_NONE,SPF_PASS autolearn=ham version=3.3.2 X-HELO: mout.gmx.com MIME-Version: 1.0 Message-ID: From: "Pierre Bogossian" To: cygwin AT cygwin DOT com Subject: Bad interaction between cygwin and ProcessBuilder when redirecting stdout Content-Type: multipart/mixed; boundary=rehcsedm-16eb3a98-2b15-439d-ac03-0a81fecdc1a8 Date: Thu, 18 Sep 2014 23:31:56 +0200 Sensitivity: Normal X-UI-Out-Filterresults: notjunk:1; --rehcsedm-16eb3a98-2b15-439d-ac03-0a81fecdc1a8 Content-Type: text/plain; charset=UTF-8 Hi, I'm trying to use ProcessBuilder to execute cygwin programs. ProcessBuilder is a Java API to run command lines. The problem I'm dealing with is that redirecting the stdout (or stderr) of a cygwin program to a file in append mode doesn't work. The file is not written. If I do the same with a normal windows program (not a cygwin one), it works. So it seems to be a cygwin related issue. If I redirect the stdout of the cygwin program to a file in write mode (instead of append mode), it does work too. Here's the groovy code I've used for testing: ///////////////////// dir = "C:\\\\pbtest\\\\"; logFile = dir + "foo.txt"; ProcessBuilder pb = new ProcessBuilder() .command("sh", "writer.sh") .directory(new File(dir)); // redirect stdout to a file in write mode //pb.redirectOutput(ProcessBuilder.Redirect.to(new File(logFile))); // redirect stdout to a file in append mode pb.redirectOutput(ProcessBuilder.Redirect.appendTo(new File(logFile))); pb.start(); ///////////////////// Where the script writer.sh just echoes a line on stdout. I've used "Process Monitor" to trace the accesses that are made to foo.txt both in the "append" and in the "write" cases. I've attached the two trace files to this mail. You'll notice that in the "append" case, sh doesn't even do the "WriteFile" call. The other difference between the two traces is the option list java is passing to the "CreateFile" call: In the "write" case: Desired Access: Generic Write, Read Attributes, Disposition: OverwriteIf In the "append" case: Desired Access: Append Data/Add Subdirectory/Create Pipe Instance, Write EA, Read Attributes, Write Attributes, Read Control, Synchronize, Disposition: OpenIf NB: I'm running cygwin 1.7.32 (32-bit) on Windows 7 (64-bit). The Java version is 1.7.0_40. Regards, Pierre --rehcsedm-16eb3a98-2b15-439d-ac03-0a81fecdc1a8 Content-Type: text/plain Content-Disposition: attachment; filename=pb_append.txt 16:02:51,0072167 java.exe 5612 CreateFile C:\pbtest\foo.txt SUCCESS Desired Access: Append Data/Add Subdirectory/Create Pipe Instance, Write EA, Read Attributes, Write Attributes, Read Control, Synchronize, Disposition: OpenIf, Options: Synchronous IO Non-Alert, Non-Directory File, Attributes: N, ShareMode: Read, Write, AllocationSize: 0, OpenResult: Opened 16:02:51,0952435 sh.exe 3192 DeviceIoControl C:\pbtest\foo.txt INVALID PARAMETER Control: 0x1b0050 (Device:0x1b Function:20 Method: 0) 16:02:51,0952795 sh.exe 3192 QueryNameInformationFile C:\pbtest\foo.txt SUCCESS Name: \pbtest\foo.txt 16:02:51,0969548 sh.exe 3192 CreateFile C:\pbtest\foo.txt SUCCESS Desired Access: Read EA, Read Attributes, Read Control, Disposition: Open, Options: Open For Backup, Open Reparse Point, Attributes: n/a, ShareMode: Read, Write, Delete, AllocationSize: n/a, OpenResult: Opened 16:02:51,0970670 sh.exe 3192 QueryInformationVolume C:\pbtest\foo.txt SUCCESS VolumeCreationTime: 31/01/2013 21:13:11, VolumeSerialNumber: 5003-210E, SupportsObjects: True, VolumeLabel: CSC ESOE 16:02:51,0970883 sh.exe 3192 QueryAttributeInformationVolume C:\pbtest\foo.txt SUCCESS FileSystemAttributes: Case Preserved, Case Sensitive, Unicode, ACLs, Compression, Named Streams, Object IDs, Reparse Points, Sparse Files, Quotas, Transactions, 0x3c00000, MaximumComponentNameLength: 255, FileSystemName: NTFS 16:02:51,0971132 sh.exe 3192 QueryNetworkOpenInformationFile C:\pbtest\foo.txt SUCCESS CreationTime: 18/09/2014 13:38:07, LastAccessTime: 18/09/2014 15:43:47, LastWriteTime: 18/09/2014 16:02:25, ChangeTime: 18/09/2014 16:02:25, AllocationSize: 01/01/1601 02:00:00, EndOfFile: 01/01/1601 02:00:00, FileAttributes: A 16:02:51,0971351 sh.exe 3192 CloseFile C:\pbtest\foo.txt SUCCESS 16:02:51,1362820 sh.exe 3192 CloseFile C:\pbtest\foo.txt SUCCESS --rehcsedm-16eb3a98-2b15-439d-ac03-0a81fecdc1a8 Content-Type: text/plain Content-Disposition: attachment; filename=pb_write.txt 16:02:25,7924624 java.exe 5612 CreateFile C:\pbtest\foo.txt SUCCESS Desired Access: Generic Write, Read Attributes, Disposition: OverwriteIf, Options: Synchronous IO Non-Alert, Non-Directory File, Attributes: N, ShareMode: Read, Write, AllocationSize: 0, OpenResult: Overwritten 16:02:25,9070108 sh.exe 6712 DeviceIoControl C:\pbtest\foo.txt INVALID PARAMETER Control: 0x1b0050 (Device:0x1b Function:20 Method: 0) 16:02:25,9070460 sh.exe 6712 QueryNameInformationFile C:\pbtest\foo.txt SUCCESS Name: \pbtest\foo.txt 16:02:25,9094194 sh.exe 6712 CreateFile C:\pbtest\foo.txt SUCCESS Desired Access: Read EA, Read Attributes, Read Control, Disposition: Open, Options: Open For Backup, Open Reparse Point, Attributes: n/a, ShareMode: Read, Write, Delete, AllocationSize: n/a, OpenResult: Opened 16:02:25,9095628 sh.exe 6712 QueryInformationVolume C:\pbtest\foo.txt SUCCESS VolumeCreationTime: 31/01/2013 21:13:11, VolumeSerialNumber: 5003-210E, SupportsObjects: True, VolumeLabel: CSC ESOE 16:02:25,9095844 sh.exe 6712 QueryAttributeInformationVolume C:\pbtest\foo.txt SUCCESS FileSystemAttributes: Case Preserved, Case Sensitive, Unicode, ACLs, Compression, Named Streams, Object IDs, Reparse Points, Sparse Files, Quotas, Transactions, 0x3c00000, MaximumComponentNameLength: 255, FileSystemName: NTFS 16:02:25,9096107 sh.exe 6712 QueryNetworkOpenInformationFile C:\pbtest\foo.txt SUCCESS CreationTime: 18/09/2014 13:38:07, LastAccessTime: 18/09/2014 15:43:47, LastWriteTime: 18/09/2014 16:02:25, ChangeTime: 18/09/2014 16:02:25, AllocationSize: 01/01/1601 02:00:00, EndOfFile: 01/01/1601 02:00:00, FileAttributes: A 16:02:25,9096323 sh.exe 6712 CloseFile C:\pbtest\foo.txt SUCCESS 16:02:25,9332531 sh.exe 6712 WriteFile C:\pbtest\foo.txt SUCCESS Offset: 0, Length: 15, Priority: Normal 16:02:25,9335022 sh.exe 6712 CloseFile C:\pbtest\foo.txt SUCCESS --rehcsedm-16eb3a98-2b15-439d-ac03-0a81fecdc1a8 Content-Type: text/plain; charset=us-ascii -- Problem reports: http://cygwin.com/problems.html FAQ: http://cygwin.com/faq/ Documentation: http://cygwin.com/docs.html Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple --rehcsedm-16eb3a98-2b15-439d-ac03-0a81fecdc1a8--