2012-01-01 14 views
3
私はLinuxのターミナルウィンドウに *(スター)を点滅させたいので、私は、ANSI制御コードを使用して考えると、ループの最初の sleep(1)書き込み " "(空白スペース/空の文字列)が、それの後に、その後 *を書く

動作しません - 何も見ることができません。どうして ?ここで簡単なprintfの場合

が私のコードです:

#include <stdio.h> 
#include <unistd.h> 

void blink(){ 
    while(1){ 
     printf("\033[2;2H*"); 
     sleep(1); 
     printf("\033[2;2H "); 
    } 
} 

int main(void){ 
    blink(); 
    return 0; 
} 

答えて

7

あなたはstdoutをフラッシュする必要があり、それは(あなたがあまりにも明確な後少し寝なければならない、そうでない場合は何も表示されません)、デフォルトではバッファリングされます。

while(1){ 
    printf("\033[2;2H*"); 
    fflush(stdout); 
    sleep(1); 
    printf("\033[2;2H "); 
    fflush(stdout); 
    sleep(1); 
} 
1

標準出力はラインバッファリングされています。試してみよう:

#include <stdio.h> 
#include <unistd.h> 

void blink(){ 
    while(1){ 
     printf("\033[2;2H*"); 
     fflush(stdout); 
     sleep(1); 
     printf("\033[2;2H "); 
     fflush(stdout); 
     sleep(1); 
    } 
} 

int main(void){ 
    blink(); 
    return 0; 
}