dup函数重定向时遇到问题
#include<stdio.h>
#include<unistd.h>
#include<fcntl.h>
int main()
{
int fd2;
fd2 = open("lsttic.out",O_RDONLY|O_RDONLY|O_CREAT,777);
if(dup2(fd2,1)==-1)
{
printf("dup error!!!");
exit(0);
}
printf("hello world!!!\n");
close(fd2);
printf("hello world!!!\n");
return 0;
}
为什么两个hello world 都既没有输出在终端上,也没有输出到文件里面?
[解决办法]
O_RDONLY
[解决办法]
O_RDONLY
[解决办法]
O_CREAT,
两个只读?
[解决办法]
改成读写后是可以的。不过第三个参数改成 0777 更好点。
[解决办法]
错误两点:
777对应的权限为1411,这个权限明显错误了. 应该用八进制表示0777,或者用S_IWUSR等这样的或
open时的mod错误,,你想要输出的,当然得用写的O_WRONLY或者O_RDWR...
把原来的lsttic.out删除...然后试下面的.
#include<stdio.h>
#include<unistd.h>
#include<fcntl.h>
#include <stdlib.h>
int main()
{
int fd2;
fd2 = open("lsttic.out",O_WRONLY
[解决办法]
O_CREAT, 0777);
if(fd2 < 0) {
perror("open error");
exit(-1);
}
if(dup2(fd2,1)==-1)
{
perror("dup error!!!");
exit(0);
}
printf("hello world!!!\n");
close(fd2);
printf("hello world!!!\n");
return 0;
}
#include<stdio.h>
#include <string.h>
#include<unistd.h>
#include<fcntl.h>
#include <stdlib.h>
#include <string.h>
#define MSG"HAHAHA\n"
int main()
{
int fd;
printf("ttyname is:%s\n", ttyname(0));
printf("ttyname is:%s\n", ttyname(1));
if((fd = open(ttyname(0), O_WRONLY)) < 0) {
perror("open error");
return -1;
}
printf("new fd is %d\n", fd);
write(fd, MSG, strlen(MSG));
return 0;
}