[C言語] 使いまわせそうな単機能処理コード (ファイル読み込み、可変長引数の読み込み)
ファイルの読み込み
man
man 2 open
man 2 read
ポイント
- openでファイルを開く
- fdは負の数でエラー
- 読み込みだけなら第2引数はO_RDONLY
- readで読む
- 第2引数の変数に第3引数バイト分読む
- ファイルサイズが大きければ何度も読むと続きから読める
- 読み込めたバイト数を戻り値で返してくれる
コード
#include <unistd.h>
#include <fcntl.h>
static int ft_strlen(char *s)
{
int i;
i = 0;
if (!*s)
return (0);
while (s[i] != '\0')
i++;
return (i);
}
int main(int argc, char **argv)
{
int fd;
char buf[100];
int ret;
if (argc >= 2)
{
fd = open(argv[1], O_RDONLY);
if (fd < 0)
return (-1);
ret = read(fd, buf, 99);
if (ret != 0)
write(1, buf, ft_strlen(buf));
close(fd);
}
}
可変長引数の読み込み
man
man va_start
ポイント
- va_list型の変数を宣言しておく
- 最初にva_startを呼び出す
- 続いてva_argを必要な回数呼び出す
- 最後にva_endを呼んで終わり
コード
#include <stdarg.h>
int printarg(const char *exp, ...)
{
va_list args;
int i;
va_start(args,exp);
i = va_arg(args, int);
printf("%d\n", i);
i = va_arg(args, int);
printf("%d\n", i);
va_end(args);
return (0);
}
int main(void)
{
printarg("%d%d", 1, 3);
return (0);
}