#include <errno.h> #include <fcntl.h> #include <sys/types.h> #include <sys/stat.h> #include <stdlib.h> #include <string.h> #define BUFFER_SIZE 1024 int main(int argc, char *argv[]) { int fd; char buffer[BUFFER_SIZE]; if(argc!=2) { fprintf(stderr,"Usage:%s outfilename a",argv[0]); exit(EXIT_FAILURE); } if((fd=open(argv[1],O_WRONLY|O_CREAT|O_TRUNC,S_IRUSR|S_IWUSR))==-1) { fprintf(stderr,"Open %s Error:%s a",argv[1],strerror(errno)); exit(EXIT_FAILURE); } if(dup2(fd,fileno(stdout))==-1) { fprintf(stderr,"Redirect Standard Out Error: %s a",strerror(errno)); exit(EXIT_FAILURE); } fprintf(stderr,"Now, please input string"); fprintf(stderr,"(To quit use CTRL+D) "); while(1) { fgets(buffer,BUFFER_SIZE,stdin); if(feof(stdin)) break; write(fileno(stdout),buffer,strlen(buffer)); } exit(EXIT_SUCCESS); }
ctrl-c 是发送 SIGINT 信号,终止一个进程
ctrl-z 是发送 SIGSTOP信号,挂起一个进程
ctrl-d 不是发送信号,而是表示一个特殊的二进制值,表示 EOF