linux函数相关知识
-
c++ 网络编程(五)TCP/IP LINUX下 socket编程 多种I/O函数 -以及readv和writev函数用法原文作者:aircraft原文链接:https://www.cnblogs.com/DOMLX/p/9614056.html 一.多种I/O函数前言:之前我们讲的数据传输一般Linux上用write和read,Windows上用send和recv。其实Linux上也可以用send和recv,它与write和read主要区别是它的最后一个参数可以附带一些扩展功能。Linux中的send和recv基础ssize_t send(int sockfd, const void *buf, size_t nbytes, int flags); 成功返回发送的字节数,失败返回-1 参数: sockfd:套接字文件描述符 buf:保存传输数据的缓冲地址值 nbytes:传输的字节数 flags:扩展信息ssize_t recv(int sockfd, void *buf, size_t nbyt
-
函数栈的实现原理简介编程语言离不开函数,函数是对一段代码的封装,往往实现了某个特定的功能,在程序中可以多次调用这个函数。稍有编程经验的同学都知道,函数是由栈实现的,调用对应入栈,退出对应出栈。在写递归函数的时候,如果递归层次太深会出现栈溢出(StackOverFlow)的错误。"函数栈"包含了对函数调用的基本理解,但是从细节来看,还有很多疑问,例如:函数的栈是如何开辟的?如何传入参数?返回值是如何得到的?本文以 C 语言为例,从内存布局、汇编代码的角度来分析函数栈的实现原理。Linux 进程内存布局当程序被执行的时候,Linux 会为其在内存中分配相应的空间以支撑程序的运行,如下图所示。linux-memory.png在虚拟内存中,内存空间被分为多个区域。代码指令保存在文本段,已初始化的全局变量 global 保存在数据段,程序运行中动态申请的内存malloc(10 * char())放在堆中,而函数执行的时候则在栈中开辟空间运行。例如main函数便占有一个函数栈,其中的变量i和ip都保存在main的栈
-
详解Linux Shell(函数与sed)函数 直接使用函数名调用,可以将其想象成Shell中的一条命令 函数内部可以直接使用参数$1、$2...$n 调用函数:function name $1$2 #!/bin/bash this_pid=$$ status=`ps -ef | grep nginx | grep-v grep | grep -v $this_pid &> /dev/null` if [$status == 0];then echo "Nginx is running well" sleep 60 else systemc start nginx echo "Nginx is down,Start it...." fi 向函数传递参数: 函数传参和给脚本传参类似,都是使用$1$2$3$4$5$6$7这种方
-
如何编写和使用自定义的 Shell 函数和函数库在 Linux 系统下,Shell 脚本可以在各种不同的情形下帮到我们,例如展示信息,甚至 自动执行特定的系统管理任务,创建简单的命令行工具等等。在本指南中,我们将向 Linux 新手展示如何可靠地存储自定义的 shell 脚本,解释如何编写 shell 函数和函数库,以及如何在其它的脚本中使用函数库中的函数。Shell 脚本要存储在何处为了在执行你自己的脚本时不必输入脚本所在位置的完整或绝对路径,脚本必须被存储在 $PATH 环境变量所定义的路径里的其中一个。使用下面的命令可以查看你系统中的 $PATH 环境变量:$ echo $PATH/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games通常来说,如果在用户的家目录下存在名为 bin 的目录,你就可以将 shell 脚本存储在那个目录下,因为那个目录会自动地被包含在用户的 $PATH 环境变量中(LCTT 译注:
linux函数相关课程
-
PHP函数篇 本教程结合实例形式分析了PHP关于自定义函数的创建、返回值、默认值、参数、值传递、作用域 以及可变函数、嵌套函数、递归函数、闭包函数的使用等相关技巧。
讲师:顾金鹤 入门 22630人正在学习
linux函数相关教程
- 2.3 函数参数 上述我们了解了函数的定义,在其中无参函数调用即调用函数名即可,对于有参函数,需要传递一定的参数来执行对应的操作,函数的参数和脚本的参数类型及用法一致,在此我们简单回顾下,看参数在函数中都有哪些分类,及该如何使用。2.3.1 位置参数位置参数顾名思义,就是传递给函数参数的位置,例如给一个函数传递一个参数,我们可以在执行 Shell 脚本获取对应位置的参数,获取参数的格式为:$n。n 代表一个数字,在此需要注意与脚本传递参数不一样,$0 为依旧为脚本的名称,在函数参数传递中,例如传递给函数的第一个参数获取就为 $1,第 2 个参数就为 $2, 以此类推……,需要其 $0 为该函数的名称。例如:[root@master func]# cat f1.sh #!/bin/bashfunction f1() { echo "函数的第一个参数为: ${1}" echo "函数的第二个参数为: ${2}" echo "函数的第三个参数为: ${3}"}# 调用函数f1 shell linux python go[root@master func]# bash f1.sh 函数的第一个参数为: shell函数的第二个参数为: linux函数的第三个参数为: python我们可以看到传递给 f1 函数共 4 个位置参数,在结果输出中可以看到由于函数体内部只对三个参数进行了处理,后续的参数也就不再处理了。2.3.2 特殊参数在 Shell 中也存在特殊含义的参数如下表:变量含义$#传递给函数的参数个数总和$*传递给脚本或函数的所有参数,当被双引号 " " 包含时,所有的位置参数被看做一个字符串$@传递给脚本或函数的所有参数,当被双引号 " " 包含时,每个位置参数被看做独立的字符串$?$? 表示函数的退出状态,返回为 0 为执行成功,非 0 则为执行失败示例:[root@master func]# cat f1.sh #!/bin/bashfunction fsum() { echo "函数第一个参数为: ${1}" echo "函数第二个参数为: ${2}" echo "函数第三个参数为: ${3}" echo "函数的参数总数为: ${#}" echo "函数的参数总数为: ${@}" local sum=0 for num in ${@}; do let sum=${sum}+${num} done echo "计算的总和为: ${sum}" return 0}# 调用函数fsum 10 20 1 2echo $?[root@master func]# bash f1.sh 函数第一个参数为: 10函数第二个参数为: 20函数第三个参数为: 1函数的参数总数为: 4函数的参数总数为: 10 20 1 2计算的总和为: 330如上可以看到特殊参数与 Shell 脚本传递参数一样。Tips:局部变量需要特别声明在函数内部利用 local 关键字来声明。
- 2. fork 函数 面试官提问: Linux 系统中的 fork 函数是什么,有什么用途?题目解析:首先从定义上看,fork 函数的作用是在一个进程的基础上创建新的进程,原有的进程被定义为父进程,新的进程被定义为子进程。在 C 语言中调用 fork() 函数即实现 fork 功能,示例:#include<unistd.h> //包含fork函数的头文件pid_t fork(void); //fork的返回类型为pid_t,我们可以看成int类型认识一个函数,需要从函数的定义入手,了解函数做了什么事情,入参是什么,出参是什么。我们以 C 语言实现的一个典型的 fork 的程序入手,示例:#include <unistd.h>#include <stdio.h> int main (){ pid_t fpid; int count = 0; fpid = fork(); if (fpid == 0) { //返回值是0,说明是子进程 printf("i am the child process, process id is %d\n", getpid()); count++; } else if(fpid > 0) { //返回值>0,说明是父进程 printf("i am the parent process, process id is %d\n", getpid()); count++; } else { //返回值<0,说明fork发生异常 printf("fork encounter exception, process id is %d\n", getpid()); } //打印计数器 printf("after fork, counting result : %d\n", count); return 0;}在 MacOS 系统上编译运行案例示例代码,运行结果如下图。test.c 编译执行结果如果是不了解函数原理的前提下,仅仅从代码层面分析,在调用 fork() 函数之后,代码会进入 if-else 判断逻辑,在控制台输出一条语句,然后在控制台打印计数器的数值。但是从真正执行的结果来看,这两个打印动作都分别执行了两次,并不符合我们的预期。fork 之后的代码逻辑被执行了两次,而且两次进入的不同的分支,所以重点在于 fork 函数到底有啥作用。按照定义、入参和出参三步走的框架,首先是分析函数的定义,调用 fork 函数之后发生了什么事情:(1)分配内存:分配新的内存空间给子进程;(2)拷贝数据:拷贝父进程的数据结构给子进程;(3)加入列表:将新生成的子进程添加到操作系统的进程列表;(4)返回结果:fork 函数调度并且返回。然后是分析 fork 函数的入参,fork 函数入参是 void,也就是自动同步进程的上下文,不需要手动声明。最后是分析 fork 函数的出参,fork 函数和程序员日常接触的函数不同,我们在 C 或者 Java 中定义的函数只会有一个返回值,fork 函数则是调用一次,返回二次。调用方(例如上述案例的 main 函数)根据返回值的不同判断处于父进程还是子进程。(1)返回值 < 0:调用失败,一般是因为操作系统中的进程个数达到上限或者内存不足以分配给新的进程;(2)返回值 = 0:调用成功,并且处于子进程;(3)返回值 > 0:调用成功,并且处于父进程。现在就不难理解,从调用 fork() 函数,代码实际上是被父子进程分别执行了一次,父进程的进程 id 是 52331,子进程的进程 id 是 52332。在掌握原理之后,我们继续探究 fork 函数的应用场景。fork 函数的本质在原有的进程基础上创建一个新的进程,所以在网络通信中使用较多,例如在客户端发送一个 HTTP 请求打到服务器时,服务器进程 fork 出一个子进程用于处理单个请求,父进程则继续等待其他的请求。
- 3.1 函数 函数其实是一段 JavaScript 代码,调用函数就会执行函数中的代码。使用 function 关键字就可以定义一个函数,简单的函数语法如下:function 函数名(参数) { 函数体; return 返回值;}var ret = 函数名(参数1) // 调用函数函数名就是函数的名字,在调用函数的时候会被使用到。参数则是传递给函数的数据,函数内部可以访问到传进来的参数。return 则标志着函数的结束,返回值会被作为结果进行返回。function add(arg1, arg2) { var sum = arg1 + arg2; return sum;}var num1 = add(1, 2);var num2 = add(4, 2);console.log(num1); // 输出:3console.log(num2); // 输出:6上面这个例子就是声明了一个名为 add 的函数,其功能就是把两个参数求和并返回。可以看到函数让代码更加有 意义,调用 add 函数的地方可以很好的理解这里是在做求和操作,同时提高了代码的复用率。
- Kotlin 函数 这篇文章我们将一起来认识 Kotlin 的函数,Kotlin 中的函数可以说比 Java 中的函数更优,解决 Java 函数调用中存在一些问题。此外还会介绍 Java 中没有的函数,比如顶层函数、中缀函数等等。
- JavaScript 函数 在 JavaScript中,函数是头等 (first-class) 对象,因为它们可以像任何其他对象一样具有属性和方法。它们与其他对象的区别在于函数可以被调用。简而言之,它们是 Function 对象。(MDN)函数就是一段代码片段,调用函数就是执行函数中的代码。
- 5.2 数字函数 Sass 提供了很多数字函数来提供计算和数值转换等功能,在 Sass 中我们也称之为 Math 函数,就像 javascript 中提供的 Math 函数一样,为我们提供了很多数学上的计算,首先我们先举例看一下简单的仅有数学计算意义的数字函数:math.$e //=> 2.7182818285 返回数学常数 e 的值math.$pi //=> 3.1415926536 返回数学常数 π 的值ceil(4.2) //=> 5 向上取整floor(4.8) //=> 4 向下取整round(4.3) //=> 4 四舍五入取近似值round(4.7) //=> 5 四舍五入取近似值abs(-10px) //=> 10px 取绝对值math.cos(100deg) //=> -0.1736481777 返回余弦值,单位必须与deg兼容或无单位math.sin(100deg) //=> 0.984807753 返回正弦值,单位必须与deg兼容或无单位math.tan(100deg) //=> -5.6712818196 返回正切值,单位必须与deg兼容或无单位math.acos(0.5) //=> 60deg 返回反余弦值,传入的参数不可带单位math.asin(0.5) //=> 30deg 返回反正弦值,传入的参数不可带单位math.atan(10) //=> 84.2894068625deg 返回反正切值,传入的参数不可带单位random() //=> 返回一个 0~1 之间的随机数percentage(0.2) //=> 20% 将无单位的小数转换为百分比数5.2.1 math.log($number, $base)这个函数用于计算对数,它会返回 $number 相对于 $base 的对数,这两个参数是不可以带有单位的。math.log(10) //=> 2.302585093math.log(10, 10) //=> 15.2.2 math.pow($base, $exponent)math.pow($base, $exponent) 函数用于计算 $base 的 $exponent 次幂,是用于幂运算的。math.pow(10, 2) //=> 1005.2.3 math.sqrt($number)math.sqrt($number) 函数返回传入参数的平方根。math.sqrt(100) //=> 105.2.4 comparable($number1, $number2)comparable($number1, $number2) 用来判断两个数值的单位是否兼容,它的返回结果是布尔值,这个在你需要对单位进行要求的时候很有用,我们举例看下:comparable(10px, 10) //=> truecomparable(10px, 10px) //=> truecomparable(10px, 10em) //=> false5.2.5 unitless($number)unitless($number) 用于判断传入的数值是否没有单位,返回结果是布尔值,如果没带单位返回 true,带单位则返回 false。unitless(100) //=> trueunitless(100px) //=> false5.2.6 unit($number)unit($number) 函数会返回传入数值的单位,并且是将单位以字符串的形式返回的,我们来看下:unit(8) //=> ""unit(8px) //=> "px"unit(8em) //=> "em"5.2.7 max(KaTeX parse error: Expected 'EOF', got '和' at position 12: number...) 和̲ min(number…)这两个函数分别接收以逗号分隔的数值,并且分别返回其中最大的值和最小的值。math.max(8, 4) //=> 8math.min(8, 4) //=> 4上面我们讲了 Sass 中数字函数,这些函数是辅助你来对数字类型的值进行一些操作,很像 javascript 中提供的 Math 函数,你不需要死记硬背,这些函数需要用到的时候再查也可以。
linux函数相关搜索
-
label
labelfor
label标签
lambda
lambda表达式
lamda
lang
last
latin
latin1
layers
layui
leave
left
leftarrow
legend
length
lengths
length函数
less