| ... | @@ -756,3 +756,32 @@ test "sigaction" { | ... | @@ -756,3 +756,32 @@ test "sigaction" { |
| 756 | os.sigaction(os.SIGUSR1, null, &old_sa); | 756 | os.sigaction(os.SIGUSR1, null, &old_sa); |
| 757 | try testing.expectEqual(os.SIG_DFL, old_sa.handler.sigaction); | 757 | try testing.expectEqual(os.SIG_DFL, old_sa.handler.sigaction); |
| 758 | } | 758 | } |
| | 759 | |
| | 760 | test "dup & dup2" { |
| | 761 | if (native_os != .linux) return error.SkipZigTest; |
| | 762 | |
| | 763 | var tmp = tmpDir(.{}); |
| | 764 | defer tmp.cleanup(); |
| | 765 | |
| | 766 | { |
| | 767 | var file = try tmp.dir.createFile("os_dup_test", .{}); |
| | 768 | defer file.close(); |
| | 769 | |
| | 770 | var duped = std.fs.File{ .handle = try std.os.dup(file.handle) }; |
| | 771 | defer duped.close(); |
| | 772 | try duped.writeAll("dup"); |
| | 773 | |
| | 774 | // Tests aren't run in parallel so using the next fd shouldn't be an issue. |
| | 775 | const new_fd = duped.handle + 1; |
| | 776 | try std.os.dup2(file.handle, new_fd); |
| | 777 | var dup2ed = std.fs.File{ .handle = new_fd }; |
| | 778 | defer dup2ed.close(); |
| | 779 | try dup2ed.writeAll("dup2"); |
| | 780 | } |
| | 781 | |
| | 782 | var file = try tmp.dir.openFile("os_dup_test", .{}); |
| | 783 | defer file.close(); |
| | 784 | |
| | 785 | var buf: [7]u8 = undefined; |
| | 786 | try testing.expectEqualStrings("dupdup2", buf[0..try file.readAll(&buf)]); |
| | 787 | } |