fork/printf相关细节
来源:互联网 发布:宣城太守知不知? 编辑:程序博客网 时间:2024/05/21 10:32
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 !!!");}
- fork/printf相关细节
- fork()与printf()
- fork,printf缓冲
- fork与printf
- fork()相关
- printf相关
- printf相关
- fork()的一些细节
- scanf,printf函数细节
- printf 一些使用细节
- 当fork()遇上了printf()
- fork后printf如何输出
- linux fork 相关
- Fork与Join相关
- fork函数相关总结
- linux fork相关题目
- fork()+printf(/n)或printf()的区别?
- fork与printf的缓存问题
- vi vim 学会这些就足够用了
- js获取url参数
- linux 下gcc编程入门
- 关于LoadRunner的迭代
- 蓝牙协议读书笔记
- fork/printf相关细节
- Tim Cook造访Valve总部的唯一目的:合作开发硬件
- 用Hibernate插入大量数据
- 代码的维护成本远远大于开发成本
- ORACLE删除字段(set unused的用法)
- Centos服务器下 Telnet、FTP连接慢的解决办法
- ftp 学会这些真得就够用了
- VideoView
- <<跟我一起写 Makefile>>