2016-08-11 7 views
1
#include <stdio.h> 
#include <fcntl.h> 
#include <sys/uio.h> 
#include <string.h> 

int main(int argc, char *argv[]) 
{ 
    int fd; 
    fd=open(argv[1],O_RDWR|O_APPEND); 
    printf("fd=%d\n",fd); 
    char *str0 = "hello "; 
    char *str1 = "world "; 
    int x=5; 
    //char ch = 'a'; 
    struct iovec iov[3]; 
    ssize_t nwritten; 

    iov[0].iov_base = str0; 
    iov[0].iov_len = strlen(str0); 
    iov[1].iov_base = str1; 
    iov[1].iov_len = strlen(str1); 
    iov[2].iov_base = (&x); 
    iov[2].iov_len = sizeof(x); 

    nwritten = writev(1, iov, 3);//1 for stdout 

    printf("\n number written=%d\n",nwritten); 
} 

ここでは、stdoutに整数値が出力されません。 誰かが私のためにいくつかの解決策を提案してください。writev操作例ここでは、標準出力に整数値を出力しません。

私の実際の出力は、私はあなたの問題はあなたがstdoutに見たいASCIIフォーマットに属し

hello world 5 
+0

:それをする

もう一つの方法は、snprintf機能を使用してASCIIに整数値を変換するのですか?メインの最後に 'fflush(stdout)'を試してください。 – Nishant

+0

私はあなたのコードをオンラインで(http://ideone.com/jKPFyq)excecutedし、正しい出力を得ました。 – Nishant

+0

サイドノート: 'printf(" \ n number written =%zd \ n "、nwritten);' – LPs

答えて

0

たい

hello world 

です。 stdoutの値がxで、5であり、ASCIIの印刷可能な文字ではありません。あなたがx=0x31を使用してコードをテストする場合

あなたが表示されます。

#include <stdio.h> 
#include <fcntl.h> 
#include <sys/uio.h> 
#include <string.h> 

int main(int argc, char *argv[]) 
{ 
    int fd; 
    fd=open(argv[1],O_RDWR|O_APPEND); 
    printf("fd=%d\n",fd); 
    char *str0 = "hello "; 
    char *str1 = "world "; 
    int x=0x31; 
    //char ch = 'a'; 
    struct iovec iov[3]; 
    ssize_t nwritten; 

    iov[0].iov_base = str0; 
    iov[0].iov_len = strlen(str0); 
    iov[1].iov_base = str1; 
    iov[1].iov_len = strlen(str1); 
    iov[2].iov_base = (&x); 
    iov[2].iov_len = sizeof(x); 

    nwritten = writev(1, iov, 3);//1 for stdout 

    printf("\n number written=%zd\n",nwritten); 
} 

OUTPUT

hello world 1 
number written=16 

することができますように:'1'

例コードのASCII値があるhello world 10x31のため私もnwritten変数の書式指定子を変更しました。 ssize_tタイプはフォーマット指定子として%zdを要求します。あなたはSTDOUTにどのような出力を見ている

#include <stdio.h> 
#include <fcntl.h> 
#include <sys/uio.h> 
#include <string.h> 

int main(int argc, char *argv[]) 
{ 
    int fd; 
    fd=open(argv[1],O_RDWR|O_APPEND); 
    printf("fd=%d\n",fd); 
    char *str0 = "hello "; 
    char *str1 = "world "; 

    int x=5; 
    char intStr[2]; 
    snprintf(intStr, sizeof(intStr), "%d", x); 


    //char ch = 'a'; 
    struct iovec iov[3]; 
    ssize_t nwritten; 

    iov[0].iov_base = str0; 
    iov[0].iov_len = strlen(str0); 
    iov[1].iov_base = str1; 
    iov[1].iov_len = strlen(str1); 
    iov[2].iov_base = intStr; 
    iov[2].iov_len = strlen(intStr); 

    nwritten = writev(1, iov, 3);//1 for stdout 

    printf("\n number written=%zd\n",nwritten); 
} 

OUTPUT

hello world 5 
number written=16 
+0

ありがとうLPs .... – debi

+0

@debiよろしくお願いします。答えとして質問を閉じます。 – LPs

関連する問題