fork/printf相關細節

1. fork用於產生子進程,主要需要注意兩點:進程的三個組成部分(代碼段/數據段/程序上下文),

    在父進程中,fork()返回的是子進程的pid;

    在子進程中,fork()返回的是0;

使用fork可以使得看似相互排斥的兩個語句都得到執行,主要是體會到這時在兩個進程中執行的,就可以了。。

詳見:http://blog.csdn.net/fuyangchang/article/details/2101085


2. c語言中的printf返回值問題,之前一直沒有注意到,它的返回值爲int類型,即爲當前打印字符的個數,例如

    int a=104;
    printf(%d",a);

    printf將返回3,再如:

    printf("123\n");

    printf將返回4

3. 在論壇上看到一個比較有意思的題目,各路大神也是給出了自己的解法。

    int main(){
     if(){ 
       printf("Hello ");
     }
     else
     {
       printf("World !!!");
     }
     return 0;
    }
在if裏面請寫入語句 使得打印出 Hello world!!!。
詳見:http://topic.csdn.net/u/20120416/11/e9e29d6d-c110-49fc-a453-42b96a1c8238.html?37311

總結一些所有的解法:

1. 比較聰明的解法----在括號裏面將其中一個打印出來,

   這裏只是說打印出來一個結果,並沒有要求你就是執行你程序裏面的那兩條打印語句,個人認爲這種解法跳出常理,另闢捷徑,非常欣賞;

2. 第一種方法的延伸 1)printf("hello word");return 0;}int ab(){if(1

    其實這種方法更加不是利用之前的打印語句,而且完全是一個新的函數,在()裏面添加一些語句,完全使之前的函數分成兩個函數,後面作爲一個子函數存在,也是一種完全新的思路,非常不錯,整理以下,這種方式結果是這樣的:

   int main()
   {
   
       if(1)
           printf("Hello World");
       return 0;
   }
   int ab(){
   
      if(1)
      {
  
         printf("Hello ");
      }
      else
      {
  
          printf("World !!!");
      }
      return 0;
  
  
  }


同時,這也利用了c語言,語句和排版無關的一個細節。


3.第一種的變形:  printf("Hello "), 0

4. fork()!=0 利用子進程,使得兩個完全排斥的語句同時執行,不過值得注意的是兩個不同的進程中執行的,也許這個纔是本題作者真正想要的答案吧;

5.

C/C++ code
#include <stdio.h>
#include <stdlib.h>

int main()
{
if((puts("hello world"), exit(0), 123))
{
printf("Hello ");
}
else
{
printf("World !!!");
}

6.考慮到父進程和子進程執行時間的關係,對代碼進行優化

int main()
{
if(fork() == 0 || sleep(1))
{
printf("Hello ");
}
else
{
printf("World !!!");
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章