发新话题
打印

dup()函数的问题

dup()函数的问题

各位大侠帮忙。我参照书本上的里子编写一个小程序,先将字符串输出到显示器,然后关闭标准输出,使用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("errorpen\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.c8 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 filea7 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 问题出在哪里?请大家多多指教。      

TOP

在cygwin下是可以的,不过在redhat上不行?      
上帝说,有问题,找GOOGLE 写程序是很神圣的事情!同样只是装系统,卖菜的大娘会的事情不见得就跟卖菜一样了。

TOP

if((fd=open(argv[1],O_WRONLY|O_CREAT,0644)==-1))' l3 z! O* o, y
注意你这句代码,仔细看看……      
上帝说,有问题,找GOOGLE 写程序是很神圣的事情!同样只是装系统,卖菜的大娘会的事情不见得就跟卖菜一样了。

TOP

发新话题