发现fork容易出错的一个地方
今天在看代码时发现一段有意思的代码
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/types.h> int main()
{
int pid=; if(pid=fork()<)
{
perror("fork() error!\n");
exit(-);
}
else if(pid==)
{
printf("child pid[%d]\n",getpid());
sleep();
}
else
{
printf("parents pid[%d]\n",getpid());
sleep();
} return ;
}
先猜一下这段代码的执行结果是什么?
看起来很简单,肯定很多人说结果如下:
child pid[%d]
parents pid[%d]
实际上执行一下,结果如下:
child pid[%d]
child pid[%d]
如果代码改动成 if((pid=fork())<0)
结果就和原先预期的一样:
child pid[%d]
parents pid[%d]
为什么是这样,原因是于运算符优先级的问题。
因为运算符‘<’ 的优先级比运算符‘=’高。所以pid获取的是后面比较表达式的结果,(fork()<0)。这个结果为假,所以pid=0。所以,父进程,子进程都会输出child pid[%d]
发现fork容易出错的一个地方的更多相关文章
- jQuery 使用索引值容易出错的一个地方
先看代码 $('input:eq(2)').attr('value', function(index, val){ console.log(index); //输出0 }); 问:当前元素的索引值,不 ...
- java基础 题和知识点总结, 关于String s是否默认初始化为null......,new一个对象和类静态域,是不是在内存中不是一个地方
一道笔试题 22. 下面代码的运行结果为:() import java.io.*; import java.util.*; public class foo{ public static void m ...
- java 将一张图片拷贝到另外一个地方。(IO流)
package com.beiwo.inputstream; import java.io.FileInputStream; import java.io.FileOutputStream; impo ...
- 实现类似QQ单一账户登录,在另一个地方登录后在原登录窗口提示下线
首先,使用框架做的最好,可以在框架页直接做一次就好了 再登陆成功后保存session的代码后添加以下代码: 注意:需要引入命名空间using System.Collections; SetApplic ...
- 平时没有怎么用Excel做 加减乘除 计算,猛地发现,其实Excel 是一个很好的简单计算器
平时没有怎么用Excel做 加减乘除 计算,猛地发现,其实Excel 是一个很好的简单计算器
- 自话自说——POI使用需要注意一个地方
2015.12.1 天气 不怎么好 心情跟天气一样.知道为什么吗,因为昨晚一晚没睡你懂吗... 今天在用POI操作excel的时候,遇到了一个很恶心的地方,这个地方真的有那种让我不相信编程的感觉 ...
- 此请求的查询字符串的长度超过配置的 maxQueryStringLength 值 --不仅wen.fonfig一个地方需要设置
提示已经很明确了... 搜出来的都是: <system.webServer> <security> <requestFiltering> <requestLi ...
- Android多进程需要注意的一个地方
可能很多项目都会有一个自定义的Application,做一些初始化操作以及全局化的一些数据保存,这时如果程序中定义了远程服务(android:process=":remote"), ...
- IE比Chrome强的一个地方
今天在开发时,调试一个功能.死活显示和同事不一样,他是测试过正常的,我的Chrome显示死活不对. 最后要重新部署了,才想起会不会是缓存的问题.清除Chrome缓存,再一试,一切正常. IE有一个功能 ...
随机推荐
- 剑指offer之 整数中1出现的次数
public class Solution { public int NumberOf1Between1AndN_Solution(int n) { int count=0; for(int i=1; ...
- Can I run a local BLAST search again multiple blast databases simultaneously?
from: https://secure.clcbio.com/helpspot/index.php?pg=kb.page&id=113 Can I run a local BLAST sea ...
- EntityFramework 学习 一 Stored Procedure
CREATE PROCEDURE [dbo].[GetCoursesByStudentId] -- Add the parameters for the stored procedure here @ ...
- SDN关键技术-Segment Routing协议简介
当前,SDN作为一种新的网络架构,已经成为行业高度关注的热点.其倡导的开放式网络,代表了从网络应用适应网络能力向网络能力主动适配网络应用需求这个网络建设理念的改变.转发与控制分离.集中的控制层面.开放 ...
- Hadoop- HDFS的API操作
1.引入依赖 <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop- ...
- POJ 1639 Picnic Planning:最小度限制生成树
题目链接:http://poj.org/problem?id=1639 题意: 给你一个无向图,n个节点,m条边,每条边有边权. 让你求一棵最小生成树,同时保证1号节点的度数<=k. 题解: 最 ...
- 一张图理解is_nll isset empty
isset 判断变量是否已存在,如果变量存在则返回 TRUE,否则返回 FALSE. empty 判断变量是否为空,如果变量是非空 或非零 的值,则 empty() 返回 FALSE.换句话说,&qu ...
- Python基础-操作mysql
mysql 属于第三方模块,需要先安装 pip install pymysql,sql执行后,数据获取函数有三种cur.fetchone()#获取第一条数据,依次类推下去,第二次执行时候,就会取除去第 ...
- 重拾安卓_01_安卓开发环境搭建(android studio)
一.下载安装SDK 参考:搭建Android开发环境——Eclipse 的安装SDK部分 二.安装android studio 参考: Android Studio 入门级教程(一) 三.andro ...
- Debian for ARM install python 3.5.x
/********************************************************************************** * Debian for ARM ...