ここから本文です

#include <stdio.h> main() { printf("Hello!!\n"); int i; if(fork() == 0){...

qam********さん

2010/5/2518:07:57

#include <stdio.h>
main()
{
printf("Hello!!\n");
int i;
if(fork() == 0){
printf("I am children\n");
}
else{
printf("I am parent\n");
}
}

上のプログラムでprintf("hello!!\n");をprintf("hello!!");に変更すると「hello!!」が出力されなくなります。
この理由は何なのかよくわかりません。教えてもらえると助かります。

補足printf()は出力のためのバッファリングを行っており、’\n’を読み込むかバッファが一杯になるまで実際にファイルの要求データが出力されません。この結果からfork()システムコールの振る舞いについて教えてください。

閲覧数:
400
回答数:
2

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

qui********さん

編集あり2010/5/2519:04:17

多分根っこはこれと同じ話かと。
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1041100150

ただし、私の手元(Windows+cygwin/Fedora12)では\nがある時は
Hello!!
I am parent
I am children
\nが無いときは
Hello!!I am parent
Hello!!I am children
となりました。状況は同じですか?
\nが無いときはバッファにたまったデータも引き継いでforkが子プロセスを起動してしまうようですね。

質問した人からのコメント

2010/5/25 21:02:57

笑う 親切な解答ありがとうございました!

ベストアンサー以外の回答

1〜1件/1件中

sli********さん

2010/5/2518:57:34

main()のところをint main(void)に変更したほうがいいと思います。
私は学校でC言語を中心に勉強していて、かならず#includeのあとはint main(void)を入れています。この回答はあくまでも私のやり方なので、これでできなくても責任は取れませんのでご注意を・・・

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる