linuxfunction
1. C语言 linux 获取调用者函数名称
可以做到的,参考一下backtrace_symbols的实现以及液隐相关原理,这里面比较复杂,也比神埋粗较底层,一两句话说不清楚
你要是想通过_FUNCTION_这种游镇方式来搞的话,可以通过如下方式:
#define m_fun(args) fun(__FILE__,__LINE__, args)
进行相应的替换即可
2. 在linux中怎么运行脚本函数
1、同一脚本文件中的函数:
#!/bin/sh
function func1()
{
echo $1
}
func1 "Hello world!"
2、其它脚本文件中的函数:
func.sh文件内容如下(其中定义了函数func1,需要1个参数):
#!/bin/sh
function func1()
{
echo $1
}
主程序脚本:
#!/bin/sh
. func.sh
func1 "Hello world!"
3. linux c++ 怎么 调用自己函数的
实验平台:ubuntu 12.04 + g++4.6 + matlab2012a
问题描述:
有一个c++程序main.cpp,和一个matlab函数myFunc.m。现在要做这件事:
1)从main.cpp中传递2个double类型的数值a和b到myFunc.m中
2)myFunc.m中求和(sum = a+b)
3)main.cpp中接收myFunc.m返回的和并输出。
思路:
1)设置matlab的编译器,使用gcc编译器。编译m文件成.so。
2)编译.cpp文件,编译时调用.so库(添加.so的路径到编译选项)。
步骤:
1)将自己的matlab函数(myFunc.m)编译成动态链接库
(1) 设定编译器为gcc,在matlab 命令行依次执行命令mex -setup和mbuild -setup:
>> mex -setup Options files control which compiler to use, the compiler and link command options, and the runtime libraries to link against. Using the 'mex -setup' command selects an options file that is placed in ~/.matlab/R2012a and used by default for 'mex'. An options file in the current working directory or specified on the command line overrides the default options file in ~/.matlab/R2012a. To override the default options file, use the 'mex -f' command (see 'mex -help' for more information).The options files available for mex are: 1: /opt/MATLAB/R2012a/bin/mexopts.sh : Template Options file for building gcc MEX-files 0: Exit with no changesEnter the number of the compiler (0-1):1/opt/MATLAB/R2012a/bin/mexopts.sh is being copied to ~/.matlab/R2012a/mexopts.shcp: cannot create regular file `~/.matlab/R2012a/mexopts.sh': Permission denied************************************************************************** Warning: The MATLAB C and Fortran API has changed to support MATLAB variables with more than 2^32-1 elements. In the near future you will be required to update your code to utilize the new API. You can find more information about this at: http://www.mathworks.com/help/techdoc/matlab_external/bsflnue-1.html Building with the -largeArrayDims option enables the new API. **************************************************************************>> mbuild -setup Options files control which compiler to use, the compiler and link command options, and the runtime libraries to link against. Using the 'mbuild -setup' command selects an options file that is placed in ~/.matlab/R2012a and used by default for 'mbuild'. An options file in the current working directory or specified on the command line overrides the default options file in ~/.matlab/R2012a. To override the default options file, use the 'mbuild -f' command (see 'mbuild -help' for more information).The options files available for mbuild are: 1: /opt/MATLAB/R2012a/bin/mbuildopts.sh : Build and link with MATLAB Compiler generated library via the system ANSI C/C++ compiler 0: Exit with no changesEnter the number of the compiler (0-1):1/opt/MATLAB/R2012a/bin/mbuildopts.sh is being copied to ~/.matlab/R2012a/mbuildopts.shcp: cannot create regular file `~/.matlab/R2012a/mbuildopts.sh': Permission denied>>
(2) 在matlab中,编写myFunc.m文件内容如下:
function [ C ] = myFunc(A, B)C = A+B;end
(3) 生成myFunc.m的动态链接库(.so)
>> mcc -W cpplib:libmyFunc -T link:lib myFunc.m -cWarning: MATLAB Toolbox Path Cache is out of date and is not being used.Type 'help toolbox_path_cache' for more info >>
等待数秒,完成。可以看到myFunc.m所在的目录下生成了多个文件:
$ lslibmyFunc.cpp libmyFunc.ctf libmyFunc.exports libmyFunc.h libmyFunc.so main.cpp mccExcludedFiles.log myFunc.m readme.txt
命
令解释:其中-W是控制编译之后的封装格式;cpplib是指编译成C++的lib;cpplib冒号后面是指编译的库的名字;-T表示目
标,link:lib表示要连接到一个库文件的目标,目标的名字即是.m函数的名字。-c表明需要生成.ctf文件,比如本例如果不加-c就不会生成
“libmyFunc.ctf”。
生成的文件中打开“libmyFunc.h”可以看到一行:
extern LIB_libmyFunc_CPP_API void MW_CALL_CONV myFunc(int nargout, mwArray& C, const mwArray& A, const mwArray& B);
这
个就是我们的myFunc.c函数待会儿在c++中调用时的接口。有4个参数,第一个是参数个数,第二个是用来接收函数返回值的,后面2个是从c++中传
递进来的变量。我们还会用到“libmyFunc.h”中的另外2个函数:libmyFuncInitialize()初始化,和注销
libmyFuncTerminate()。
2)编写main.cpp,代码如下:
#include <iostream>#include "mclmcr.h"#include "matrix.h"#include "mclcppclass.h"#include "libmyFunc.h"#include "mclmcrrt.h"using namespace std;int main() { // initialize lib,这里必须做初始化! if( !libmyFuncInitialize()) { std::cout << "Could not initialize libmyFunc!" << std::endl; return -1; } // 用户输入2个数值 double a, b; cout<<"Please input 2 numbers <a b> and then press enter: "<<endl; cin >> a; cin >> b; double c; //used to receive the result // 为变量分配内存空间, maltab只有一种变量,就是矩阵,为了和c++变量接轨,设置成1*1的矩阵 mwArray mwA(1, 1, mxDOUBLE_CLASS); //1,1表示矩阵的大小, mxDOUBLE_CLASS表示变量的精度 mwArray mwB(1, 1, mxDOUBLE_CLASS); mwArray mwC(1, 1, mxDOUBLE_CLASS); // 调用类里面的SetData函数给类赋值 mwA.SetData(&a, 1); mwB.SetData(&b, 1); // 调用自己的函数,求和。 myFunc(1, mwC, mwA, mwB); c = mwC.Get(1, 1); cout<<"The sum is: "<<c<<endl; // 后面是一些终止调用的程序 // terminate the lib libmyFuncTerminate(); // terminate MCR mclTerminateApplication(); return EXIT_SUCCESS;}
3)编译main.cpp函数,调用libmyFunc.so
$ g++ -o main -I. -I/opt/MATLAB/R2012a/extern/include -L. -L/opt/MATLAB/R2012a/runtime/glnxa64 main.cpp -lmyFunc -lm -lmwmclmcrrt -lmwmclmcr
开始编译时也遇到一些问题,主要是链接库路径问题导致的编译错误,详细错误汇总在另篇笔记里(点此查看)。
编译成功后,需要装一下MCR Installer,步骤点此。
运行结果:
$ ./main Warning: latest version of matlab app-defaults file not found.Contact your system administrator to have this file installedPlease input 2 numbers <a b> and then press enter: 10 100The sum is: 110$ ./main Warning: latest version of matlab app-defaults file not found.Contact your system administrator to have this file installedPlease input 2 numbers <a b> and then press enter: 1 1The sum is: 2
源代码及编译过程中的所有文件已打包,点击这里可以下载。
4. linux查看路径命令
Linux系统下想要查看当前的路径,那我们该使用那个命令呢?下面由我为大家整理了linux查看路径命令的相关知识,希望对大家有帮助。
目录
linux查看路径命令
linux查看路径的其他命令
linux下查找某个文件位置的方法
查看当前路径命令:pwd
pwd命令能够显示当前所处的路径。
这个命令比较简单,如果有时在操作过程中忘记了当前的路径,则可以通过此命令来查看路径,其执行方式为:
# pwd /home/samlee
第一行为运行的命令,第二行的内容为运行pwd命令后显示的信息,即显示用户当前所在的工作目录的路径为/home/samlee。
提示:
应该经常使用pwd命令。Linux的目录结构非常复杂,一个小小的分支就可能会有十几层目录,就好像是个森林,所以Linux不会像Windows那样把全路径写在提示符里,那样太长了。
<<<
whereis 用来查看一个命令或者文件所在的绝对路径,而 which 用来查看当前要执行的命令所在的路径。
下面举个例子来说明。加入你的linux系统上装了多个版本的java。如果你直接在命令行敲命令 "java -version" ,会得到一个结果。但是,你知道是哪一个路径下的java在执行吗?如果想知道,可以用 which 命令:
which java
得到的结果就是系统默认执行的java所在的路径。
如果使用命令: whereis java
那么你会得到很多条结果,因为这个命令把所有包含java(不管是文件还是文件夹)的路径都列了出来。
<<<
一.通过文件名查找法:
举例说明,假设你忘记了httpd.conf这个文件在系统的哪个目录 下,甚至在系统的某个地方也不知道,则这是可以使用如下命令:
find / -name httpd.conf
这个命令语法看起来很容易就明白了,就是直接在find后面写上 -name,表明要求系统按照文件名查找,最后写上httpd.conf这个目标文件名即可。稍等一会系统会在计算机屏幕上显示出查找结果列表:
etc/httpd/conf/httpd.conf
这就是httpd.conf这个文件在Linux系统中的完整路径。查找成功。
如果输入以上查找命令后系统并没有显示出结果,那么不要以为系统没有执行find / -name httpd.conf命令,而可能是你的系统中没有安装Apache服务器,这时只要你安装了ApacheWeb服务器,然后再使用find / -name httpd.conf就能找到这个配置文件了。
二.无错误查找技巧:
在Linux系统中“find”命令是大多数系统用户都可以使用的命令,并不是ROOT系统管理员的专利。但是普通用户使用“find”命令时也有可 能遇到这样的问题,那就是Linux系统中系统管理员ROOT可以把某些文件目录设置成禁止访问模式。这样普通用户就没有权限用“find”命令来查询这 些目录或者文件。当普通用户使用“find”命令来查询这些文件目录是,往往会出现"Permissiondenied."(禁止访问)字样。系统将无法 查询到你想要的文件。为了避免这样的错误,我们可是使用转移错误提示的方法尝试着查找文件,例如输入:
find / -name access_log 2>/dev/null
这个方法是把查找错误提示转移到特定的目录中去。系统执行这个命令后,遇到错误的信息就直接输送到stderrstream2 中,access_log2就是表明系统将把错误信息输送到stderrstream2中,/dev/null是一个特殊的文件,表明空的或者错误的信 息,这样查询到的错误信息将被转移了,不会再显示了。
在Linux系统查找文件也会遇到这样一个实际问题。如果我们在整个硬盘,这个系统中查找某个文件就要花费相当长的一段时间,特别是大型Linux系 统和容量较大的硬盘,文件放在套嵌很深的目录中的时候。如果我们知道了这个文件存放在某个大的目录中,那么只要在这个目录中往下找就能节省很多时间了。使 用find /etc -name httpd.conf就可以解决这个问题。上面的命令就是表示在etc目录中查询httpd.conf这个文件。这里再说明一下“/”这个函数符号的含 义,如果输入“find /”就是表示要求Linux系统在整个ROOT目录下查找文件,也就是在整个硬盘上查找文件,而“find /etc”就是只在
etc目录下查找文件。因为“find /etc”表示只在etc目录下查找文件,所以查找的速度就相应要快很多了。
三.根据部分文件名查找方法:
例如我们知道某个文件包含有srm这3个字母,那么要找到系统中所有包含有这3个字母的文件是可以实现 的,输入:
find /etc -name '_srm_'
这个命令表明了Linux系统将在/etc整个目录中查找所有的包含有srm这3个字母的文件,比如absrmyz,tibc.srm等等符合条件的文件都能显示出来。如果你还知道这个文件是由srm 这3个字母打头的,那么我们还可以省略最前面的星号,命令如下:
find/etc -name 'srm_'
这是只有像srmyz这样的文件才被查找出来,像absrmyz或者absrm这样的文件都不符合要求,不被显示,这样查找文件的效率和可靠性就大大增强了。
四.根据文件的特征查询方法:
如果只知道某个文件的大小,修改日期等特征也可以使用“find”命令查找出来,这和WINDOWS系统中的“搜索”功能是基本相同的。在微软的“搜 索”中,“搜索助理”使得搜索文件和文件夹、打印机、用户以及网络中的其他计算机更加容易。它甚至使在Internet上搜索更加容易。“搜索助理”还包 括一个索引服务,该服务维护了计算机中所有文件的索引,使得搜索速度更快。使用“搜索助理”时,用户可以指定多个搜索标准。例如,用户可以按名称、类型及 大小搜索文件和文件夹。用户甚至可以搜索包含特定文本的文件。如果用户正使用Active Directory,这时还可以搜索带有特定名称或位置的打印机。
例如我们知道一个Linux文件大小为1,500bytes,那么我们可是使用如下命令来查询find /-size
1500c,字符c表明这个要查找的文件的大小是以bytes为单位。如果我们连这个文件的具体大小都不知道,那么在Linux中还可以进行模糊查找方式 来解决。例如我们输入find /-size+10000000c这个命令,则标明我们指定系统在根目录中查找出大于10000000字节的文件并显示出来。命令中的“+”是表示要求系 统只列出大于指定大小的文件,而使用“-”则表示要求系统列出小于指定大小的文件。下面的列表就是在Linux使用不同“find"命令后系统所要作出的 查找动作,从中我们很容易看出在Linux中使用“find”命令的方式是很多的,“find”命令查找文件只要灵活应用,丝毫不比在WINDOWS中查 找能力差。
find / -amin -10 # 查找在系统中最后10分钟访问的文件
find / -atime -2 # 查找在系统中最后48小时访问的文件
find / -empty # 查找在系统中为空的文件或者文件夹
find / -group cat # 查找在系统中属于groupcat的文件
find / -mmin -5 # 查找在系统中最后5分钟里修改过的文件
find / -mtime -1 #查找在系统中最后24小时里修改过的文件
find / -nouser #查找在系统中属于作废用户的文件
find / -user fred #查找在系统中属于FRED这个用户的文件
<<<
linux查看路径命令相关 文章 :
★ linux查看路径命令
★ linux如何查找命令的路径
★ linux查询路径命令
★ Linux系统中查看当前路径的命令
★ linux查询命令路径
★ Linux中文件查找命令总结
★ linux查询目录命令
★ liunx find(文件查找)命令的介绍
★ Linux系统中tracert命令使用详解
var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm..com/hm.js?"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })();5. daemonlinux
linuxfunction鍑芥暟daemon镄勪綔鐢锛
linux鎻愪緵浜哾aemon鍑芥暟鐢ㄤ簬鍒涘缓瀹堟姢杩涚▼锛屽疄鐜板师鐞嗕笌涓婃枃涓浠嬬粛镄勬槸涓镙风殑銆
#include
intdaemon(intnochdir,intnoclose);
1锛巇aemon()鍑芥暟涓昏佺敤浜庡笇链涜㔉绂绘带鍒跺彴锛屼互瀹堟姢杩涚▼褰㈠纺鍦ㄥ悗鍙拌繍琛岀殑绋嫔簭銆
2锛庡綋nochdir涓0镞讹纴daemon灏嗘洿鏀硅繘锘庣殑镙圭洰褰曚负root(钬/钬)銆
3锛庡綋noclose涓0鏄锛宒aemon灏呜繘锘庣殑STDIN,STDOUT,STDERR閮介吨瀹氩悜鍒/dev/null銆
daemon镄勫疄鐜板ぇ镊村备笅锛
intdaemon(intnochdir,intnoclose)
{
pid_tpid;
if(!nochdirchdir("/")!=0)//濡傛灉nochdir=0,闾d箞鏀瑰彉鍒"/"镙圭洰褰
return-1;
if(!noclose)//濡傛灉娌℃湁noclose镙囧织
{
intfd=open("/dev/null",O_RDWR);
if(fd0)
return-1;
/*閲嶅畾钖戞爣鍑呜緭鍏ャ佽緭鍑恒侀敊璇鍒/dev/null锛
阌鐩樼殑杈揿叆灏嗗硅繘绋嬫棤浠讳綍褰卞搷锛岃繘绋嬬殑杈揿嚭涔熶笉浼氲緭鍑哄埌缁堢
*/
p(fd,0);
p(fd,1);
p(fd,2);
close(fd);
}
pid=fork();//鍒涘缓瀛愯繘绋.
if(pid0)//澶辫触
return-1;
if(pid>0)
_exit(0);//杩斿洖镓ц岀殑鏄鐖惰繘绋,闾d箞鐖惰繘绋嬮鍑,璁╁瓙杩涚▼鍙樻垚鐪熸g殑瀛ゅ効杩涚▼.
//鍒涘缓镄刣aemon瀛愯繘绋嬫墽琛屽埌杩欓噷浜
if(setsid()0)//鍒涘缓鏂扮殑浼氲瘽锛屽苟浣垮缑瀛愯繘绋嬫垚涓烘柊浼氲瘽镄勯嗗ご杩涚▼
return-1;
return0;//鎴愬姛鍒涘缓daemon瀛愯繘绋
}
浣跨敤瀹炰緥锛
intmain()
{
daemon(1,1)锛//鍙傛暟镙规嵁闇姹傜‘瀹
/*鍦ㄨ繖閲屾坊锷犱綘闇瑕佸湪钖庡彴锅氱殑宸ヤ綔浠g爜*/
}
濡备綍𨱒姝昏繖镙风殑杩涚▼锛
阃氲繃ps+grep镓惧埌瀵瑰簲镄勫悗鍙拌繘绋嬶纴浣跨敤kill锻戒护灏呜繘绋嬫潃姝伙绂涔熷彲鍒涘缓shell鑴氭湰瀵硅繘绋嬬殑钖锷ㄣ佸叧闂銆侀吨钖杩涜岃嚜锷ㄧ$悊
docker鏁欑▼锛
docker鏄涓涓寮婧愮殑搴旂敤瀹瑰櫒寮曟搸锛岃╁紑鍙戣呭彲浠ユ墦鍖呬粬浠镄勫簲鐢ㄤ互鍙娄緷璧栧寘鍒颁竴涓鍙绉绘岖殑闀滃儚涓锛岀劧钖庡彂甯冨埌浠讳綍娴佽岀殑Linux鎴朩indows链哄櫒涓婏纴涔熷彲浠ュ疄鐜拌櫄𨰾熷寲銆
瀹瑰櫒鏄瀹屽叏浣跨敤娌欑辨満鍒讹纴鐩镐簰涔嬮棿涓崭细链変换浣曟帴鍙c
涓涓瀹屾暣镄刣ocker链変互涓嫔嚑涓閮ㄥ垎缁勬垚锛
1.DockerClient瀹㈡埛绔
2.DockerDaemon瀹堟姢杩涚▼
3.DockerImage闀滃儚
4.DockerContainer瀹瑰櫒
docker鏄疨aaS鎻愪緵鍟哾otCloud寮婧愮殑涓涓锘轰簬LXC镄勯珮绾у瑰櫒寮曟搸锛屾簮浠g爜镓樼″湪Github涓,锘轰簬go璇瑷骞堕伒浠峣pache2.0鍗忚寮婧愩
docker镊2013骞翠互𨱒ラ潪甯哥伀鐑锛屾棤璁烘槸浠巊ithub涓婄殑浠g爜娲昏穬搴︼纴杩樻槸Redhat鍦≧HEL6.5涓闆嗘垚瀵筪ocker镄勬敮鎸,灏辫繛Google镄凛omputeEngine涔熸敮鎸乨ocker鍦ㄥ叾涔嬩笂杩愯屻
鍦↙inux鐜澧冧笅濡备綍瀹夎呭拰浣跨敤Docker锛
Docker浠1.13鐗堟湰涔嫔悗閲囩敤镞堕棿绾跨殑鏂瑰纺浣滀负鐗堟湰鍙凤纴鍒嗕负绀惧尯鐗圕E鍜屼紒涓氱増EE
浠Centos镎崭綔绯荤粺瀹夎匔E鐗堜负渚嬶细
涓.鍗歌浇
1锛夋煡鐪嬬郴缁熶腑docker-ce瀹夎呭寘
2锛夊嵏杞绦ocker-ce瀹夎呭寘
3锛夊垹闄docker镄勯暅镀忕洰褰曟枃浠
rm-rf/var/lib/docker/
4锛夊垹闄docker镄勯暅镀忕洰褰曟枃浠
rm-rf/var/run/docker/
浜.瀹夎
1锛夐厤缃畒um浠揿簱docker-ce闀滃儚婧
yum-config-manager--add-repohttps://download.docker.com/linux/centos/docker-ce.repo
2锛夊畨瑁卍ocker-ce
yuminstalldocker-ce
3锛夊惎锷ㄥ苟锷犲叆寮链哄惎锷
systemctlstartdocker.servicesystemctlenabledocker.service
linuxsupervisor浣灭敤锛
Supervisor鏄鐢≒ython寮鍙戠殑涓濂楅氱敤镄勮繘绋嬬$悊绋嫔簭锛岃兘灏嗕竴涓鏅阃氱殑锻戒护琛岃繘绋嫔彉涓哄悗鍙癫aemon锛屽苟鐩戞带杩涚▼鐘舵侊纴寮傚父阃鍑烘椂鑳借嚜锷ㄩ吨钖銆
瀹冩槸阃氲繃fork/exec镄勬柟寮忔妸杩欎簺琚绠$悊镄勮繘绋嫔綋浣渟upervisor镄勫瓙杩涚▼𨱒ュ惎锷锛岃繖镙峰彧瑕佸湪supervisor镄勯厤缃鏂囦欢涓锛屾妸瑕佺$悊镄勮繘绋嬬殑鍙镓ц屾枃浠剁殑璺寰勫啓杩涘幓鍗冲彲銆备篃瀹炵幇褰揿瓙杩涚▼鎸傛帀镄勬椂鍊欙纴鐖惰繘绋嫔彲浠ュ嗳纭銮峰彇瀛愯繘绋嬫寕鎺夌殑淇℃伅镄勶纴鍙浠ラ夋嫨鏄钖﹁嚜宸卞惎锷ㄥ拰鎶ヨ︺
supervisor杩樻彁渚涗简涓涓锷熻兘锛屽彲浠ヤ负supervisord鎴栬呮疮涓瀛愯繘绋嬶纴璁剧疆涓涓闱沥oot镄剈ser锛岃繖涓猽ser灏卞彲浠ョ$悊瀹冨瑰簲镄勮繘绋嬨
瀹堟姢绾跨▼镄勪綔鐢锛
瀹堟姢绾跨▼浠ュ强鍏朵綔鐢
阃氩父𨱒ヨ达纴瀹堟姢绾跨▼缁忓父琚鐢ㄦ潵镓ц屼竴浜涘悗鍙颁换锷★纴浣嗘槸锻锛屼綘鍙埚笇链涘湪绋嫔簭阃鍑烘椂锛屾垨钥呰碕VM阃鍑烘椂锛岀嚎绋嬭兘澶熻嚜锷ㄥ叧闂锛屾ゆ椂锛屽畧鎶ょ嚎绋嬫槸浣犵殑棣栭夈
钬滃彧瑕佸綋鍓岼VM瀹炰緥涓灏氩瓨浠讳綍涓涓闱炲畧鎶ょ嚎绋嬫病链夌粨𨱒燂纴瀹堟姢绾跨▼灏卞叏閮ㄥ伐浣滐绂鍙链夊綋链钖庝竴涓闱炲畧鎶ょ嚎绋嬬粨𨱒熸槸锛屽畧鎶ょ嚎绋嬮殢镌JVM涓钖岀粨𨱒熷伐浣滐纴Daemon浣灭敤鏄涓哄叾浠栫嚎绋嬫彁渚涗究鍒╂湇锷★纴瀹堟姢绾跨▼链鍏稿瀷镄勫簲鐢ㄥ氨鏄疓C(鍨冨溇锲炴敹鍣)锛屼粬灏辨槸涓涓寰堢О镵岀殑瀹堟姢钥呫傗
6. linux 如何自定义命令函数
你是想问在shell(比如说bash)下如何定义一个函数cuts吗?
如果是bash,那么就直接在shell 下输入以下内容
function cuts () {
echo "Hello world"
}
然后就可以在当前终端下调用cuts了,比如
$ cuts
Hello world
如果你是想在某个脚本中调用函数cuts,那么只要把上面那段代码加入脚本中,也就可以用了,比如
#!/bin/bash
function cuts ()
{
echo "Hello world"
}
....
cuts
....