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 !!!");
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值