admin管理员组

文章数量:1130349

STDOUT

在重定向之前保存默认文件描述符,在向text文件写入后再还原STDOUT_FILENO描述符

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<fcntl.h>
#include<sys/types.h>
int main(int argc, char* argv[])
{int sfd,ret;sfd=dup(STDOUT_FILENO);  //保存屏幕输出的文件描述符,用于恢复int fd=open("text.txt", O_CREAT|O_RDWR|O_TRUNC, S_IRUSR|S_IWUSR);if(fd < 0){printf("Open Error!\n");return 0;}printf("-------\n");sleep(1);dup2(fd,STDOUT_FILENO);  //修改默认屏幕输出指向printf("write to text by STDOUT_FILENO\n");dup2(sfd,STDOUT_FILENO);  // 还原屏幕输出默认文件描述符指向printf("STDOUT_FILENO come back\n");char buf[1000];int n;while((n=read(STDIN_FILENO, buf,1000)) > 0)  //接受键盘输入,并将其存入buf所指向的缓存中   {if(write(fd, buf, n)<n)    //将buf所指向的缓存区的n个字节的数据写入到由文件描述符fd2所指示的文件中{printf("Write Error!!\n");return 0;}}return 0;
}

STDOUT

在重定向之前保存默认文件描述符,在向text文件写入后再还原STDOUT_FILENO描述符

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<fcntl.h>
#include<sys/types.h>
int main(int argc, char* argv[])
{int sfd,ret;sfd=dup(STDOUT_FILENO);  //保存屏幕输出的文件描述符,用于恢复int fd=open("text.txt", O_CREAT|O_RDWR|O_TRUNC, S_IRUSR|S_IWUSR);if(fd < 0){printf("Open Error!\n");return 0;}printf("-------\n");sleep(1);dup2(fd,STDOUT_FILENO);  //修改默认屏幕输出指向printf("write to text by STDOUT_FILENO\n");dup2(sfd,STDOUT_FILENO);  // 还原屏幕输出默认文件描述符指向printf("STDOUT_FILENO come back\n");char buf[1000];int n;while((n=read(STDIN_FILENO, buf,1000)) > 0)  //接受键盘输入,并将其存入buf所指向的缓存中   {if(write(fd, buf, n)<n)    //将buf所指向的缓存区的n个字节的数据写入到由文件描述符fd2所指示的文件中{printf("Write Error!!\n");return 0;}}return 0;
}

本文标签: stdout