dup2重定向标准输出失败了,为何呢

dup2重定向标准输出失败了,为什么呢?
我尝试重定向标准输出到一个文件里面,如下所示的程序:

#include<sys/types.h>
#include<sys/stat.h>
#include<unistd.h>
#include<fcntl.h>
#include<stdio.h>
#include<stdlib.h>
int main(int argc, char *argv[])
{
    int fd=open("x.txt",O_CREAT|O_RDWR|S_IWUSR|S_IRUSR|S_IRGRP|S_IWGRP);
    dup2(1,fd);
    write(1,"hello world\n",12);
    printf("myself\n");
    close(fd);
    return 0;
}

编译运行,命令行输出

~$ g++ n.cpp && ./a.out
hello world
myself

并没有如我所期望的被重定向到了一个文件里面去。
而且这个新创建的x.txt文件的权限,看起来也没有我所设置的权限,而且很奇怪的多了一个"set-user-id"位:

-rwS-wx---  1 a    a       0  4月 29 13:03 x.txt*


这是为什么呢? 我的程序错在哪里

------解决思路----------------------
dup2(1,fd); ====>  dup2(fd, 1);
------解决思路----------------------
删掉x.txt,然后再次运行这个程序,结果就对了。