-1

を使用して C プログラムをコーディングしてtermcapsいますが、次のように実行して値を返す必要があります。

more `./program arg1 arg2 arg3 arg4`

get_winsizeまた、画面が小さすぎる場合、関数には条件があります。

int     *get_winsize()
{
    struct winsize  w;
    int             *ret;

    ret = malloc(sizeof(int) * 2);
    ioctl(STDOUT_FILENO, TIOCGWINSZ, &w);
    ret[0] = w.ws_row;
    ret[1] = w.ws_col;
    if (ret[0] <= 5 || ret[1] <= 5)
    {
        printf("screen too small : size %d x %d\n", ret[0], ret[1]);
        exit(0);
    }
    return (ret);
} 

逆引用符なしでプログラムを開始すると、問題はありません。しかし、逆引用符で私は持っています:

size: No such file or directory
screen: No such file or directory
0: No such file or directory
x: No such file or directory
0: No such file or directory

理由はありますか?画面のない環境を逆引用符で複製する可能性がありますか?!

4

2 に答える 2

1

最初: の戻り値をチェックしません。ioctlつまり、失敗した場合のw構造体の結果は未定義です。
2 番目: バッククォートを使用すると、プログラムが端末から切断されるため、ioctl失敗します。
3 番目: 標準出力ではなく標準エラーを使用して結果を書き込むようにプログラムを再設計します。次に、次のように実行します。

tmpfile=`mktemp`
./program arg1 arg2 arg3 arg4 2> $tmpfile
more `cat $tmpfile`
rm $tmpfile
于 2016-01-18T17:22:14.600 に答える
0

私は解決策を見つけました!

まず、次のようにtermcaps関数でサイズを取得できます

tgetnum("co"); //column
tgetnum("li"); //rows

次に、バックコートを処理するために、すべてを印刷してい/dev/ttyます!

問題解決 !

于 2016-01-19T14:03:35.277 に答える