質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Q&A

解決済

3回答

421閲覧

LINUXのatexit()

Y.R.T

総合スコア42

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

0グッド

0クリップ

投稿2020/08/12 00:42

atexit () 関数は、与えられた function を、 exit (3) やプログラムの main () 関数からの返りを通じて、プロセスが正常終了した時に呼び出される 関数として登録する。

と説明されているのですが、
下記構文ではatexit(bye)で、
byeという関数を登録しているのですか?
byeはexitするための関数となるのでしょうか?

#include <stdio.h> #include <stdlib.h> #include <unistd.h> void bye(void) { printf("That was all, folks\n"); } int main(){ long a; int i; a = sysconf(_SC_ATEXIT_MAX); printf("ATEXIT_MAX = %ld\n", a); i = atexit(bye); if (i != 0) { fprintf(stderr, "cannot set exit function\n"); return EXIT_FAILURE; } return EXIT_SUCCESS; }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

atexit () 関数は、与えられた function を、 exit (3) やプログラムの main () 関数からの返りを通じて、プロセスが正常終了した時に呼び出される 関数として登録する。

簡明なな説明だと思うのですが。。。

byeはexitするための関数となるのでしょうか?

上の説明で分からないとなると、この説明が通じるかどうか自信が無いですが、
「exitするため」じゃなくて「exitしたときに呼ばれる関数」です。

exitするための関数はexitです。

投稿2020/08/12 01:28

otn

総合スコア84802

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

atexitで登録された関数が呼び出されるのは

  • main関数のreturn文を抜けたとき
  • exit関数が呼び出されたとき

です。
15秒で理解するmain関数からのreturnとexitとquick_exitとか - Qiita

投稿2020/08/12 01:35

yumetodo

総合スコア5850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

こんにちは。
この場合、byeはexit(プロセスが終了)する過程で呼び出される関数となります。
exitするためではありません。

投稿2020/08/12 00:57

DreamTheater

総合スコア1095

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Y.R.T

2020/08/12 01:01

byeはコマンド入力したりする関数になるのではないのですね?
DreamTheater

2020/08/12 01:06

コマンド入力が、標準入力から何か受け取るという意味なら可能だと思います。 一般的な用途としては、プロセス終了時に必ず行うべき後始末の処理などでしょうか。
Y.R.T

2020/08/12 01:15

ここでbyeがどういう動作をするかは、別にbye関数を作成する必要があるのでしょうか?
DreamTheater

2020/08/12 01:22

試してみるのは良いと思いますが、atexit関数に登録するハンドラは必ずreturnで終了するように実装してください。 byeの中でexitしたら、際限なくbye->exitが呼び出され最終的にはスタックオーバーフローしてしまうので。
Y.R.T

2020/08/12 01:58

ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問