blob: 025c9672f0a6f8a191555e2f9e239abc11d74da8 [file] [edit]
/*
* Copyright 2011 The Emscripten Authors. All rights reserved.
* Emscripten is available under two separate licenses, the MIT license and the
* University of Illinois/NCSA Open Source License. Both these licenses can be
* found in the LICENSE file.
*/
#include <stdio.h>
#include <errno.h>
#include <unistd.h>
#include <fcntl.h>
#include <emscripten.h>
#include <assert.h>
#include <string.h>
int main() {
int f, f2, f3;
printf("DUP\n");
f = open("/", O_RDONLY);
f2 = open("/", O_RDONLY);
f3 = dup(f);
printf("errno: %d\n", errno);
printf("f: %d\n", f != f2 && f != f3);
printf("f2,f3: %d\n", f2 != f3);
printf("close(f1): %d\n", close(f));
printf("close(f2): %d\n", close(f2));
printf("close(f3): %d\n", close(f3));
printf("\n");
errno = 0;
printf("DUP2\n");
f = open("/", O_RDONLY);
f2 = open("/", O_RDONLY);
f3 = dup2(f, f2);
printf("errno: %d\n", errno);
printf("f: %d\n", f != f2 && f != f3);
printf("f2,f3: %d\n", f2 == f3);
printf("close(f1): %d\n", close(f));
printf("close(f2): %d\n", close(f2));
printf("close(f3): %d\n", close(f3));
printf("\n");
errno = 0;
printf("DUP2 err\n");
f = dup2(-2, -2);
printf("f: %d\n", f == -1);
printf("errno: %d\n", errno);
printf("close(f): %d\n", close(f));
printf("\n");
errno = 0;
printf("DUP2 pipe\n");
int p[2];
pipe(p);
int g = dup2(p[0], 7);
int rtn = write(p[1], "abc", 3);
assert(rtn == 3);
char buf[5] = {0};
rtn = read(g, buf, 5);
assert(rtn == 3);
printf("buf: %s\n", buf);
assert(strcmp(buf, "abc") == 0);
printf("\n");
printf("DUP2 shared seek position\n");
int fd1 = open("./blah.txt", O_RDWR | O_CREAT | O_EXCL, 0600);
int fd2 = dup(fd1);
int n = write(fd1, "abcabc\n", 7);
assert(n == 7);
assert(lseek(fd1, 0, SEEK_CUR) == 7);
assert(lseek(fd2, 0, SEEK_CUR) == 7);
return 0;
}