パート II. Linux (POSIX) のファイル入出力

目次

17. system 関数
18. fprintf 関数
19. open / dprintf 関数
20. read() / write() 関数
20.1. 文字列をヒープにコピー
21. lseek()
22. fopen / fread / fwrite / fclose 関数

 Linux の入出力で初心者がすぐに学ぶ関数は printf とか puts とかですかね。

int printf(const char *format, ...);
int puts(const char *s);

 使い方は以下のような感じになります。

main.c. 

  1 #include <stdio.h>
  2
  3 int main()
  4 {
  5   int x = 100;
  6   printf("x = %d\n",x);
  7   puts("hello");
  8 }

ビルドと出力. 

$ gcc main.c
$ ./a.out
x = 100
hello

 printf は %d が整数型データのフォーマット文字列です。

 \n は改行のフォーマット文字列となります。

 フォーマット文字列( const char * format )引数の後に続く引数は、文字列で指定されたデータとなり、複数の指定が可能ですね。

 puts は単に文字列を指定してるだけです。

 printf は例えば以下のようにポインターを表示したりできます。

main.c. 

  1 #include <stdio.h>
  2
  3 int main(int argc, char **argv)
  4 {
  5   char *p = 0;
  6   int top = 100;
  7
  8   printf("&p    = 0x%lx\n", (unsigned long)&p);
  9   printf("&top  = 0x%lx\n", (unsigned long)&top);
 10   printf("&argc = 0x%lx\n", (unsigned long)&argc);
 11   printf("&argv = 0x%lx\n", (unsigned long)&argv);
 12 }

ビルドと出力. 

$ gcc main.c
$ ./a.out
&p    = 0x7ffd6f12afc0
&top  = 0x7ffd6f12afbc
&argc = 0x7ffd6f12afac
&argv = 0x7ffd6f12afa0

 スタック領域のアドレスの配置がわかりやすくなってますね。

 スタックメモリーは高いところから下がっていくので、各変数がどのように割り当てられたかわかりますね。

 ちなみに printf と puts は入出力関数の中ではひとくくりに分類できます。

 printf や puts は標準出力( standard output / stdout )に出すための関数です。

Copyright 2018-2019, by Masaki Komatsu