利用dup2函数进行重定向标准输出,使输出到一个文件中
main.c
/*********************************************************************************
* Copyright: (C) 2013 Yanshifu<Yanshifu@gmail.com>
* All rights reserved.
*
* Filename: main.c
* Description: This file
*
* Version: 1.0.0(09/11/2013~)
* Author: Yan Shifu <Yanshifu@gmail.com>
* ChangeLog: 1, Release initial version on "09/11/2013 01:01:54 PM"
*
********************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#define pstr "file content"
/********************************************************************************
* Description:
* Input Args:
* Output Args:
* Return Value:
********************************************************************************/
int main (int argc, char **argv)
{
if (argc < 2)
{
printf("Usage: %s filename", argv[1]);
exit(1);
}
print(argv[1], pstr);
return 0;
} /* ----- End of main() ----- */
print.c
/*********************************************************************************
* Copyright: (C) 2013 Yanshifu<Yanshifu@gmail.com>
* All rights reserved.
*
* Filename: print.c
* Description: This file
*
* Version: 1.0.0(09/11/2013~)
* Author: Yan Shifu <Yanshifu@gmail.com>
* ChangeLog: 1, Release initial version on "09/11/2013 01:03:40 PM"
*
********************************************************************************/
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
void print(const char *filename, const char *str)
{
int fd;
if ((fd = creat(filename, 0666)) < 0)
{
printf("creat file error \n");
exit(1);
}
dup2(fd, STDOUT_FILENO);
printf("str = %s", str);
}
print.h
/********************************************************************************
* Copyright: (C) 2013 Yanshifu<Yanshifu@gmail.com>
* All rights reserved.
*
* Filename: print.h
* Description: This head file
*
* Version: 1.0.0(09/11/2013~)
* Author: Yan Shifu <Yanshifu@gmail.com>
* ChangeLog: 1, Release initial version on "09/11/2013 02:02:54 PM"
*
********************************************************************************/
#ifndef _PRINT_H
#define _PRINT_H
void print(const char *filename, const char *str);
#endif
makefile
bins=main
objs=main.o
srcs=main.c
$(bins):$(objs)
gcc -o main main.o print.o
$(objs):$(srcs)
gcc -c main.c
gcc -c print.c print.h
clean:
rm -f $(bins) *.o *.h.gch