各位大侠帮忙。我参照书本上的里子编写一个小程序,先将字符串输出到显示器,然后关闭标准输出,使用dup()函数重定向到新的文件。如下:
/ e+ C/ R: W" b7 A6 |2 } #include <stdio.h>
4 Y( k# T# b3 p' P! D5 ^; B, k #include <stdlib.h>
& j6 N; U) O" L* U+ e #include <unistd.h>
6 z) F8 k2 x% x+ [7 B
#include <fcntl.h>
) Z5 `( R2 o) m$ Y7 m 6 E3 x2 i m& @" L
void usage(char *name)
) N. t8 t# a; A* @! J: l" J
{
# Y0 f" H9 O% Q8 o" E- y' V printf("Usage:%snewfile\n",name);
5 e' P0 G1 I7 x exit(1);
7 O7 f$ e( L, p/ w
}
) n6 I5 F: k/ l9 F; j - A1 W8 m7 }3 ^5 S' |+ b
int main(int argc,char **argv)
/ r4 G+ Y9 j) b* l# E$ E {
[5 ~1 _' O3 z" u
int fd;
/ w" ^7 [' s. @$ ~# H/ X2 v* e# ~4 O int new=0;
4 J8 I$ V0 \" t
if(argc!=2)
. e4 ^& j3 A3 M: Q
usage(argv[0]);
( b8 z1 p; m7 H. {- w! m: X+ X if((fd=open(argv[1],O_WRONLY|O_CREAT,0644)==-1))
. k$ ] \0 a- r; s3 @ {
3 y" o) t# d. Y( q9 W. O+ T' l
printf("error

pen\n");
4 L! e H3 \ K: i exit(1);
- k3 J1 M- B& N3 S- U4 i
}
# _4 G1 n( k6 W9 g1 ^ e" f
printf("This line go to screen\n");
% T, ^+ k7 s, ^$ B
close(STDOUT_FILENO);
/ [+ Y' K7 o: O9 L7 O if(dup(fd)==-1)
$ H7 g, D- Q+ D. T d" P
{
- k2 _+ i1 y/ u+ M6 S* d; Q printf("error:dup\n");
" {" u4 I% |% _* v7 i( | exit(1);
+ W2 x j7 {# g) [ }
7 y. F, o# w( t( I8 L: [ printf("This line go to %s\n",argv[1]);
1 x* `8 k: v& E close(fd);
& ]; o0 Q" j1 B. o% s- y5 c. \
exit(0);
8 _4 |3 [$ c8 z9 E" t
}
% M2 G: a( H! n. z0 {. O9 y4 @8 B 输入以下命令:
, g4 ?6 O( m+ U) `6 t x& O6 t
#gcc -c dupuse.c
8 n3 B/ J- S7 Q r- Z ^# ]
#gcc -o dupuse dupuse.c
) O8 o+ H, g9 ^% g) ^
#./dupuse filea
8 x3 }0 r7 N/ \ 8 u- R* G: v$ G H% J6 `1 z1 l4 X
期望的输出为:
; l% {. a. r) u" L8 i, o+ K this line go to screen
; L9 L4 E- U6 ?+ Q
6 j0 d% d; ^ `5 C3 f5 \( E* r 然后验证程序结果用以下命令:
9 H9 y/ [( A/ K& ^. r5 z' P
#more filea
7 G6 x( w( S. S" H1 m 结果为 this line go to filea.
* g/ k! }& r+ R3 t # J' k9 G7 ^ l( h
我的问题是:看起来dup()函数重定向不成功,输入命令:
/ k; R* k% p8 w% o) s+ R7 u. G
#./dupuse filea
7 k! U$ D/ }: d! E8 h$ V ?
结果为:
. M+ f4 x5 P) i this line go to screen
$ q( F8 l/ u$ |% x this line go to filea
* ]' J( y4 z, v/ u- g% _ 2 {: P; {4 ~' A( _: q3 M5 G
查看filea文件的确存在,但是
, q/ A: h, d& u, z2 Y
#more filea 的结果是什么都没有,也就是说仅仅创建了filea,但是输出并未写入此文件。
3 `& L. _- x C5 j' R# O- y 问题出在哪里?请大家多多指教。