最后打印的文字,通常应该打印在顶部

时间:2013-10-27 18:12:27

标签: c redirect stdout dup2

我已经创建了这个函数来打印文件内容:

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);
        }
    }
}

问题是,当我在程序中调用此函数时,将文件复制为stdout(此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

由于

1 个答案:

答案 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);

BTW:建议不要尝试打印NULL。

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