putchar
関数を使って、などの関数を書きたいと思いwrite
ます。
#include <unistd.h>
ssize_t f(int fd, int c) {
return write(fd, &c, 1);
}
しかし、ここにはエンディアンの問題があるのではないかと思います。だから私は使うべきsizeof (int)
ですか?私は少し混乱しています、私は処理する方法がわかりません(キャストが必要unsigned char
ですか?)。
はい、ここには潜在的にエンディアンの問題があります。治療法は、c
としてではunsigned char
なく、として渡すことint
です。
ssize_t
f(int fd, unsigned char c)
{
return write(fd, &c, 1);
}
<stdio.h>
ルーチンは、主に歴史的な理由でsで動作しますint
。それらは非常に古く、今日では正しくないと見なされる多くのインターフェイス設計の決定が含まれています。それらをテンプレートとして使用しないでください。
はい、良いキャッチです。エンディアンの問題があります。関数のシグネチャを保持したい場合は、データを一時的にunsigned charに格納してから、出力する必要があります。
#include <unistd.h>
ssize_t f(int fd, int c) {
unsigned char ch = (unsigned char)c;
return write(fd, &ch, sizeof(unsigned char));
}