函数调用

fork和exec函数

こ雲淡風輕ζ 提交于 2020-03-05 09:29:44
#include<unistd.h> pid_t fork(void); 返回:在子进程中为0,在父进程中为子进程IO,若出错则为-1 fork最困难之处在于调用它一次,它却返回两次。它在调用进程(称为父进程)中返回一次,返回值是新派生进程(称为子进程)的进程ID号;在子进程中又返回一次,返回值为0.因此,返回值本身告知当前进程是子进程还是父进程。 fork在子进程返回0而不是父进程的进程ID的原因在于:任何子进程只有一个父进程,而子进程总是可以通过getppid取得父进程的进程ID。相反,父进程可以有许多子进程而且无法获取各个子进程的进程ID。如果父进程想要跟踪所有子进程的进程ID,那么它必须记录每次调用fork的返回值。 父进程中调用fork之前打开的所有描述符在fork返回之后由子进程分享 。我们将看到网络服务器利用了这个特性:父进程调用accept之后调用fork。所接受的已连接套接字随后就在进程与子进程之间共享。通常情况下,子进程接着读写这个已连接套接字,父进程则关闭这个已连接套接字。 fork的两个典型用法。 (1)一个进程创建一个自身的副本,这样每个副本都可以在另一个副本执行其他任务的同时处理各自的某个操作。这是网络服务器的典型用法。 (2)一个进程想要执行另一个程序。既然创建新进程的唯一方法是调用fork,该进程于是首先调用fork创建一个自身的副本

javascript当中的this详解

时光总嘲笑我的痴心妄想 提交于 2020-03-05 01:29:58
总结this的3个规则: this是调用上下文,上下文被创建或者初始化时才确定 非严格模式:this是全局对象;严格模式:this是undefined 函数调用     a. 以函数形式调用的函数通常不使用this关键字,非严格模式下函数调用模式的this就是全局对象。     b. 以方法形式调用的函数的this指的是当前调用方法的对象     c. 以构造函数形式调用的函数的this指的是被构造的对象,具体操作为:       i. 创建一个新对象       ii. 将构造函数的作用域赋给新对象(因此构造函数中的this就指向这个新对象)       iii. 执行构造函数的代码(为这个新对象添加属性,这个时候this才确定下来就是该对象)       iv. 返回新对象       v. 另外要注意的是,构造函数通常不使用return关键字,如果使用,则调用表达式的值就是return的这个对象,如果使用却没有指定返回值,或者返回一个原始值,那么就忽略返回       值,同时使用构造出来的新对象作为返回结果。   4. this是一个关键字,js的语法不允许给this赋值,关键字this没有作用域的限制,嵌套的函数不会从调用它的函数中继承this。即:如果嵌套函数作为方法调用,其this的值指向调用它的对象(与规则3相符合) 如果嵌套函数作为函数调用

045 函数的调用和返回值

感情迁移 提交于 2020-03-05 00:03:12
目录 一、函数调用 1.1 什么是函数调用 1.2 为何调用函数 1.3 函数调用的三种形式 二、函数的返回值 2.1 什么是返回值 2.2 返回值的注意事项 一、函数调用 1.1 什么是函数调用 第一次将函数其实就讲了函数的调用,但是你不得不再次更新你对函数调用的印象。 函数名(…) 即调用函数,会执行函数体代码,直到碰到return或者执行完函数体内所有代码结束。 函数运行完毕所有代码,如果函数体不写return,则会返回None。 def foo(): pass print(foo()) None 1.2 为何调用函数 调用函数就是为了得到函数处理的结果,使用该函数的功能 1.3 函数调用的三种形式 def max_self(x,y): if x>y: return x else: return y # 1. max_self(1,2) # 2. res = max_self(1,2)*12 # 3. max_self(max_self(20000,30000),40000) 二、函数的返回值 2.1 什么是返回值 返回值就是函数内部中的代码经过一系列的处理之后加工得到你想要的那个东西。但是那个东西目前还在函数内部,如果不去将它返回,就无法知道结果是什么。 就好像,我要去干一件事情,我只有知道结果才知道,我去干的事情有没有完成。 而返回值就是为了将那个结果返回给调用者。 2

函数的返回值与调用

扶醉桌前 提交于 2020-03-05 00:02:45
函数的返回值 函数内部代码经过一系列逻辑处理获得的结果。(什么是返回值) def func(): name = 'nick' return name #函数的返回值,终止函数(跳出函数) name = func() print(name) nick def add(x, y): # return (x, y, x + y) # return可以返回任意数据类型 return x, y, x + y # return可以返回任意数据类型,不加括号返回多个值时,默认用元祖的形式返回 x,y,z = add(1, 2) print(x,y,z) 1,2,3 return是一个函数结束的标志,函数内可以有多个return,只要执行到return,函数就会执行。 return的返回值可以返回任意数据类型 return的返回值无个数限制,即可以使用逗号隔开返回多个值 0个:返回None 1个:返回值是该值本身 多个:返回值是元组 函数的调用 什么是函数调用? 函数名()即调用函数,会执行函数体代码,直到碰到return或者执行完函数体内所有代码结束。 为什么要调用函数? 为了使用函数的功能 函数调用三种形式 def max_self(x,y): if x>y: return x else: return y # 1. max_self(1,2) # 2. res = max_self(1,2)

前端学习(33)~js学习(十):函数

让人想犯罪 __ 提交于 2020-03-04 22:54:40
关于函数的核心内容: 函数有哪几种定义和调用方式 this:函数内部的 this 指向、如何改变 this 的指向。 函数的严格模式 高阶函数:函数作为参数传递、函数作为返回值传递 闭包:闭包的作用 递归:递归的两个条件 深拷贝和浅拷贝的区别 函数的介绍 函数: 就是将一些功能或语句进行封装,在需要的时候,通过调用的形式,执行这些语句。 函数也是一个对象 使用 typeof 检查一个函数对象时,会返回function 函数的作用: 将大量重复的语句抽取出来,写在函数里,以后需要这些语句的时候,可以直接调用函数,避免重复劳动。 简化编程,让编程模块化。高内聚、低耦合。 来看个例子: console.log("你好"); sayHello(); // 调用函数 // 定义函数 function sayHello(){ console.log("欢迎"); console.log("welcome"); } 函数的定义/声明 方式一:利用函数关键字自定义函数(命名函数) 使用 函数声明 来创建一个函数(也就是 function 关键字) 。语法: function 函数名([形参1,形参2...形参N]){ // 备注:语法中的中括号,表示“可选” 语句... } 举例: function fun1(a, b){ return a+b; } 解释如下: function:是一个关键字

Golang 笔记 4 defer、error、panic

百般思念 提交于 2020-03-04 19:05:38
一、defer语句 defer语句仅能被放置在函数或方法中。它由关键字defer和一个调用表达式组成。这里的表达式所表示的既不能是对Go语言内建函数的调用也不能是对Go语言标准库代码包unsafe中的那些函数的调用。实际上,满足上述条件的表达式被称为表达式语句。例: func readFile(path string) ([]byte, error) { file,err != os.Open(path) if err != nil { return nil,err } defer file.Close() return ioutil.ReadAll(file) } 函数readFile的功能是读取指定文件或目录本身的内容并将其返回,同时当有错误发生时立即向调用方报告。其中os和ioutil代表的都是Go语言标准库中的代码包。在打开文件且未发现有错误发生之后,紧跟了一条defer语句。其中携带的表达式语句表示的是对被打开文件的关闭操作。当这条defer语句被执行的时候,其中的这条表达式语句并不会被执行。它的确切的执行时机是在其所属的函数(这里是readFile)的执行即将结束的那个时刻。也就是说,在readFile函数真正结束执行的前一刻,file.Close()才会被执行。该语句可保证在readFile函数将结果返回给调用方之前,那个文件或目录一定会被关闭。

JavaScript学习总结(七)——JavaScript函数(function)

心已入冬 提交于 2020-03-04 19:03:37
一、函数基本概念   为完成某一功能的程序指令(语句)的集合,称为函数。 二、JavaScript函数的分类   1、自定义函数(我们自己编写的函数),如:function funName(){}   2、系统函数(JavaScript自带的函数),如alert函数。 三、函数的调用方式   1、普通调用:functionName(实际参数...)   2、通过指向函数的变量去调用:       var myVar=函数名;       myVar(实际参数...); 四、函数返回值   1.当函数无明确返回值时,返回的值就是"undefined"。   2.当函数有返回值时,返回值是什么就返回什么。 函数测试代码: 1 <script type="text/javascript"> 2 var str="window.alert('孤傲苍狼');"; 3 eval(str);//eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码。 4 /*自定义函数*/ 5 function test(str){ 6 alert(str); 7 } 8 window.alert(test);//输出test函数的定义 9 //函数的调用方式1 10 test("孤傲苍狼"); 11 //函数的调用方式2 12 var myFunction=test; 13

panic和recover的使用规则

假装没事ソ 提交于 2020-03-04 18:53:43
转自个人博客 chinazt.cc 在上一节中,我们介绍了defer的使用。 这一节中,我们温习一下panic和recover的使用规则。 在golang当中不存在tye ... catch 异常处理逻辑。在golang当中使用defer, panic和recover来控制程序执行流程,借此来达到处理异常的目的。 Panic是一个可以停止程序执行流程的内置函数。 假设当前F函数当中某处代码触发panic函数,则F函数停止后面代码的执行,转而执行F函数内部的defer函数(如果已经声明了defer函数的话...),然后结束F函数,将当前处理权转给F的调用函数。 对于F的调用方M来说, F是调用panic函数结束的,而不是执行return结束的 。这一点很重要,因为调用panic函数结束是没有返回值的。 对于F的调用方M来说,F调用结束并且已经退出。所以引出第一个规则: 调用panic后,调用方函数执行从当前调用点退出 我们通过下面的代码来解释这个问题: package main import "fmt" func main() { f() fmt.Println("Returned normally from f.") } func f() { defer func() { if r := recover(); r != nil { fmt.Println("Recovered in

day13

南笙酒味 提交于 2020-03-04 18:00:39
函数的嵌套定义 就是函数内部在定义一个新的函数 函数fn2 想使用函数fn1 内部定义的局部变量 直接把函数fn2 定义在函数fn1 内部 这样函数fn2 可以直接访问 函数fn1内部的变量 如果函数fn2 被定义在函数fn1 中 就成为了函数fn1中的局部变量 fn2与函数地址的对应关系就存放在 函数fn1建立起来的 局部名称空间中 外部是无法调用函数fn2 的 只能在函数fn1中 把他return fn2 作为函数fn1函数的返回值 这样外部才能调用 fn2 也就是一个函数对象可以作为另个函数的返回值 在外部也可以用fn2变量来接受fn1的返回值 fn2 与返回值的对应关系存放在全局名称空间中 返回值就等于赋值给了外部的fn2 外部fn2 与函数内部的fn2指向同一个函数地址那么函数内部的fn2 就能被外部调用了 global关键字 ·将局部变量提升为全局变量 如果与全局变量有重名 就统一全局与局部变量如果想更改全局变量的值发生地址的变化可用global声明该变量 全局没有同名变量 直接提升局部变量为全局变量 nonlocal 将局部的变量提升为嵌套局部变量 必须要有同名嵌套的局部变量 就是统一嵌套局部与局部的同名变量       如果局部想改变嵌套局部变量的值(发生地址的变化),可以用nonlocal声明该变量 开放封闭原则 在不修改原代码与调用方式的情况下

this关键字

时光总嘲笑我的痴心妄想 提交于 2020-03-04 17:14:24
本文主要解释在JS里面this关键字的指向问题(在浏览器环境下)。 阅读此文章,还需要心平气和的阅读完,相信一定会有所收获。 首先,必须搞清楚在JS里面,函数的几种调用方式: 普通函数调用 作为方法来调用 作为构造函数来调用 使用apply/call方法来调用 Function.prototype.bind方法 es6箭头函数 但是不管函数是按哪种方法来调用的,请记住一点: 谁调用这个函数或方法,this关键字就指向谁。 接下来就分情况来讨论下这些不同的情况: 1、普通函数调用 1 function person(){ 2 this.name="xl"; 3 console.log(this); 4 console.log(this.name); 5 } 6 7 person(); //输出 window xl 8 在这段代码中 person 函数作为普通函数调用,实际上 person 是作为全局对象 window 的一个方法来进行调用的,即 window.person() ; 所以这个地方是 window 对象调用了 person 方法,那么 person 函数当中的 this 即指 window, 同时 window 还拥有了另外一个属性 name ,值为 xl . 1 var name="xl"; 2 function person(){ 3 console.log(this