使用dup2+fgets+printf实现文件拷贝的功能。
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <pthread.h>
#include <semaphore.h>
#include <wait.h>
#include <signal.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <semaphore.h>
#include <sys/msg.h>
#include <sys/shm.h>
#include <sys/un.h>
typedef struct sockaddr_in addr_in_t;
typedef struct sockaddr addr_t;
typedef struct sockaddr_un addr_un_t;
int main(int argc, const char *argv[])
{
int rfd = open(argv[1],O_RDONLY);
if(rfd == -1)
{
printf("您要复制的文件不存在!\n");
return 1;
}
int wfd = open(argv[2],O_WRONLY | O_CREAT | O_TRUNC,0664);
char buf[2] = {0};
int stdout_backup = dup(1);
int stdin_backup = dup(0);
dup2(wfd,1);
dup2(rfd,0);
close(rfd);
close(wfd);
while(fgets(buf,2,stdin) !=NULL)
{
printf("%c",buf[0]);
}
fflush(stdout);
dup2(stdout_backup,1);
dup2(stdin_backup,0);
return 0;
}