2013-10-27 73 views
1

打印结束印刷,我创建了这个功能打印文件内容:文本时,通常应在顶部

void afficher (char * nomFichier){ 
    if(nomFichier == NULL) 
     printf("Erreur : %s\n",nomFichier); 
    else 
    { 
     char buf[15]; 
     int nb; 
     int fd = open(nomFichier,O_RDONLY); 
     if(fd == -1) printf ("Erreur ouverture : %s\n",nomFichier); 
     else 
     { 
      printf("Fichier : %s\n",nomFichier);//print the file name 
      while((nb = read(fd,buf,15)) > 0){ 
      write(1,buf,nb); 
      } 
      printf("\n"); 
      close(fd); 
     } 
    } 
} 

的问题是,当我在程序中调用这个函数有DUP2' ED标准输出到文件(在此CAS fichierSortie)

int fd = open(fichierSortie, mode, 0666); 
if(fd == -1) // erreur 
    Erreur("Erreur lors de création du fichier : ",2); 
printf("%d\n",dup2(fd,1)); // on redirige la sortie standard 
close(fd); 
afficher(filename); 

我得到这个:

line1 
line2 
last line of the file 
Fichier : filename 

,但通常我应该得到

Fichier : filename 
line1 
line2 
last line of the file 

感谢

+0

我很难理解你在做什么 - 你认为你可以提供更多的上下文吗?谢谢。 –

+0

我觉得现在清楚不是吗? –

回答

1

不太清楚这一点,但...

// Performed buffered so it goes out when internal buffering is full or flushed 
printf("Fichier : %s\n",nomFichier); 
... 
// Performed unbuffered, so it goes out promptly 
write(1,buf,nb); 

要同步,fflush(stdout)

// Performed buffered so it goes out when internal buffering is full or flushed 
printf("Fichier : %s\n",nomFichier); 
fflush(stdout); 
... 
// Performed unbuffered, so it goes out promptly 
write(1,buf,nb); 
... 
printf("\n"); 
fflush(stdout); 

顺便说一句:建议不要试图打印NULL。

if(nomFichier == NULL) 
    // printf("Erreur : %s\n",nomFichier); 
    printf("Erreur : (NULL)\n"); 
+0

是的,但它通过使用fflush(标准输出)。刷新不存在? –

+0

@rabah Rachid Oops:flush() - > fflush() – chux