源码范例
A. 求Linux下命令的源代码,
1.ash
(1)简介
ash --a shell
这是由Kenneth Almquist在1989年编写的,ash是Linux下的许多命令解释器中的一个,它的许多特性接近于SYSTEM V的shell。
(2)部分参数说明
ash [ -efIijnsxz ] [ +efIijnsxz ] [ -c命令] [ 参数 ]
-c 命令:若用-c参数,则ash从标准输入中读入命令(在执行完-c带的命令之后)。
-s:若用-s参数,则ash从标准输入中读入命令(在执行完-c带的命令之后)。
如果不跟-c -s参数则ash以所跟的第一个参数为文件名,从此文件中读入命令。如无参数则ash缺省设定-s参数,从标准输入中读入命令,直到输入exit。
如果参数0的第一个字母是"-"则ash确定为login shell,ash将从/etc/profile或用户的根目录中的.profile读入相应的设置和环境变量。
-e:若用-e参数,则ash执行命令后返回值为非零值时则退出ash。
-f:若用-f参数,则ash关闭自动产生文件名功能。
-j:打开伯克利UNIX风格的工作控制。
-n:读入命令但是并不执行。
(3)范例
ash -c ls
ash执行ls这个命令后退回原先的目录和shell。
ash -s
ash执行一个新的shell,现在可以在这个shell中工作,按(Ctrl-D)或输入exit后,则退回原先的目录和shell,所设定的环境变量返回原先的值。
2.at
(1)简介
at,batch,atq,atrm:安排、检查、删除队列中的工作。
由Thomas Koenig编写。
(2)部分参数说明
at [-V] [-q队列] [-f文件名] [-mldbv] 时间
at -c 作业 [作业…]
atq [-V] [-q队列] [-v]
atrm [-V] 作业 [作业…]
batch [-V] [-q队列] [-f文件名] [-mv] [时间]
at在设定的时间执行作业。
atq列出用户排在队列中的作业,如果是超级用户,则列出队列中的所有工作。
atrm删除队列中的作业。
batch用低优先级运行作业,只要系统的loadavg(系统平均负载)<1.5(或者在atrun中设定的值)它就开始执行作业。
-V:若用-V参数,则显示版本号到标准错误输出。
-q队列:若用-q参数,则指定可选队列名称,队列名称可以是a到z或A到Z之间的任意字母。at的缺省队列名是c,batch的缺省队列名是E,队列的字母顺序越高,则队列的优先级越低。如果是大写字母的话则提交给batch,如果atq使用-q参数,则只显示这个队列中的作业。
-m:执行完作业后即使此作业并没有输也给提交作业的用户发送提示mail。
-f文件名:从文件中读取作业。
-l:等于atq。
-d:等于atrm。
-b:等于batch。
时间:这是用户设定的作业开始执行的时间。时间的格式分成三个部分:时间、日期、偏移量。可接受的时间形式是HHMM或HH:MM,在一天中指定的时间运行,如果时间过去了就在第二天执行。可以在时间后加入AM或PM使其在上午或下午运行,也可以指定在哪一天执行,给出日期的格式应为MMDDYY或MM/DD/YY或MM.DD.YY,也可以给出偏移量:
时间+计数时间间隔
时间间隔可以是minutes,hours,days,weeks。
也可以指定today让作业在今天执行,指定tommorow让作业在明天执行。
(3)注意事项
如果没有指定-f选项,是at从标准输入读入所有的命令,所以可以通过管道、重定向或交互输入来输入命令。
超级用户可以在任何情况下使用at系列的命令。一般用户使用at系列命令的权利由文件/etc/at.allow,/etc/at.deny控制。如果/etc/at.allow存在,则只有列在这个文件中的用户才能使用at系列的命令。如果/etc/at.allow文件不存在,则检查/etc/at.deny这个文件。只要不列在这个文件中的用户都可以使用at系列的命令。缺省的配置是/etc/at.deny,是一个空文件,这表明所有的用户都可以使用at系列的命令。
(4)范例
at -f work 4pm + 3 days
在三天后下午4点执行文件work中的作业。
at -f work 10am Jul 31
在七月31日上午10点执行文件work中的作业。
3.banner
banner:打印大标题。
banner在标准输出上打印高质量的标题,如果没有输入要打印的文字,则其等待从标准输入输入一行文字。其标题由"*"组成。由Mark Horton编写。
(2)部分参数说明
/usr/bin/banner [ -wn ]信息
-w宽度 输出宽度从131到n,n缺省为80列。
(3)注意事项
不能打印字符:< ,>,[,],\,^,_,{,},|,-。信息长度为10个英文字符,如果用空格分开字符串,还是连续打印字符串,两个字符串可以被括在引号(")中。这命名banner把这些字任串置于同一行中。
4.bash
(1)简介
bash:GNU Bourne-Again Shell
自由软件基金会(Free Software Foundation Inc)拥有bash版权。
bash是Linux下的许多命令解释器中的一个,同sh兼容,并且包含了ksh和csh中一些有用的特性。遵从IEEE Posix Shell and Tools specification(IEEE Working Group 1003.2)。
B. 鍗佷釜缁忓吀镄凛寮婧愰”鐩浠g爜
鎺㈢储C璇瑷镄勭紪绋嫔疂搴掳细鍗佸ぇ缁忓吀寮婧愰”鐩浠g爜鎺ㄨ崘
鍦ㄥ紑婧愮殑涓栫晫閲岋纴C璇瑷镄勯瓍锷涗笉瑷钥屽柣銆备綔涓哄簳灞傜紪绋嬭瑷锛孋镄勭伒娲绘у拰鏁堢巼涓哄紑鍙戣呬滑鎻愪緵浜嗘棤绌风殑鍙鑳姐备互涓嬫槸鍗佷釜绮惧绩鎸戦夌殑锛屾棦杞婚噺绾у张缁忓吀镄凛寮婧愰”鐩锛屽畠浠涓崭粎鏄鎶链瀛︿範镄勭懓瀹濓纴镟存槸绋嫔簭锻樻垚闀跨殑鍨鑴氱煶銆
- Webbench - 绠鍗曢珮鏁堢殑缃戠珯铡嫔姏娴嬭瘯宸ュ叿
Webbench鏄涓娆剧敤C璇瑷缂栧啓镄凩inux涓嬭交閲忕骇宸ュ叿锛屽畠浠ヤ笉鍒600琛岀殑浠g爜妯℃嫙澶ч噺骞跺彂杩炴帴锛屽府锷╀綘娴嬭瘯缃戠珯镄勮礋杞借兘锷涖傚叾婧愮爜绠娲佹槑浜嗭纴鏄鐞呜В缃戠粶铡嫔姏娴嬭瘯锘虹镄勫ソ渚嫔瓙銆傛兂娣卞叆浜呜В锛熻块梾锛http://home.tiscali.cz/~cz210552/webbench.html
- Tinyhttpd - 鏋佺亩HTTP链嶅姟鍣
浠502琛屼唬镰侊纸钖娉ㄩ喷锛夌殑Tinyhttpd锛屾槸鍏ラ棬HTTP链嶅姟鍣ㄧ紪绋嬬殑缁濅匠鏁欐潗銆傚畠璁╀綘涓绐ユ湇锷″櫒镙稿绩锛屼唬镰侀噺铏藉皯锛屼絾锷熻兘瀹炵敤銆备笅杞藉湴鍧锛http://sourceforge.net/projects/tinyhttpd/
- cJSON - JSON缂栬В镰佸櫒镄勮交閲忕骇阃夋嫨
cJSON鏄疌璇瑷涓镄勮交閲忕骇JSON搴掳纴500澶氲屼唬镰佹棦楂樻晥鍙堟槗镍伞傝槠铹跺姛鑳芥湁闄愶纴浣嗗叾灏忓阀鍜岄熷害浣垮叾鎴愪负瀛︿範C椤圭洰镄勭悊𨱍宠寖渚嬨傞”鐩涓婚〉锛http://sourceforge.net/projects/cjson/ - CMockery - 鍗曞厓娴嬭瘯杞婚獞鍏
Google鍑哄搧镄凛Mockery锛屼竴涓杞婚噺绾х殑C鍗曞厓娴嬭瘯妗嗘灦锛3K琛屼唬镰佸唴锛屼綘灏嗛嗕细鍒版祴璇曢┍锷ㄥ紑鍙戠殑榄呭姏銆傚畠镄勬槗鐢ㄦу拰鍏煎规т娇鍏舵垚涓哄祵鍏ュ纺寮鍙戣呯殑鐞嗘兂阃夋嫨銆傛洿澶氲︽儏锛http://code.google.com/p/cmockery/downloads/list
缁х画娣卞叆锛屼綘灏嗗彂鐜帮细
- Libev - 浜嬩欢椹卞姩缂栫▼镄勯珮鏁堜箣阃
Libev鏄涓涓锘轰簬epoll鍜宬queue镄勯珮鏁堜簨浠跺簱锛4.15鐗堟湰鍙链8000澶氲屼唬镰侊纴鏄瀛︿範浜嬩欢椹卞姩缂栫▼镄勭粷浣宠祫婧愩备简瑙f洿澶氾细http://software.schmorp.de/pkg/libev.html - Memcached - 缂揿瓨绯荤粺涓镄勬ц兘鏄庢槦
Memcached鏄涓涓鍒嗗竷寮忓唴瀛樼紦瀛樼郴缁燂纴鐢ㄤ簬鍑忚交鏁版嵁搴揿帇锷涖1.4.7鐗堟湰浠g爜閲忛备腑锛屽ぇ绾10K琛岋纴蹇阃熸彁鍗囦綘镄勬暟鎹搴撴ц兘鐞呜В銆备笅杞藉湴鍧锛http://memcached.org/ - Lua - 璇瑷绮剧亩镄勭紪绋嫔吀锣
Lua浠g爜杞婚噺鍒颁护浜烘侪鍙癸纴1.5W琛岋纸铡婚櫎绌虹槠鍜屾敞閲婏级镄100% ANSI C浠g爜锛岃╀綘棰嗙暐鏋佺亩璁捐$殑榄呭姏銆备简瑙f洿澶氾细http://www.lua.org/
链钖庯纴鎴戜滑链夛细
- sqlite - 绠鍗曢珮鏁堢殑宓屽叆寮忔暟鎹搴
SQLite锛屼竴涓灏忓瀷镄勚佽嚜鍖呭惈镄勚侀浂閰岖疆镄凷QL鏁版嵁搴掳纴3涓囱孋浠g爜瀹炵幇寮哄ぇ锷熻兘銆傚傛灉浣犺拷姹傝交閲忎笌楂樻晥锛屽畠涓嶅归敊杩囥备笅杞藉湴鍧锛http://www.sqlite.org/ - UNIX V6 - 绠鍗曡屽己澶х殑镎崭綔绯荤粺鍐呮牳
UNIX V6鍐呮牳婧愪唬镰侊纴绾1涓囱屼唬镰侊纴阃傚悎鍒濆﹁呯悊瑙e拰瀛︿範銆傚畠铏界亩娲侊纴鍗磋兘璁╀綘浣挞獙鍒版搷浣灭郴缁熷紑鍙戠殑绮鹃珦銆备简瑙f洿澶氾细http://minnie.tuhs.org/cgi-bin/utree.pl?file=V6 - NetBSD - 寮哄ぇ涓旂Щ妞岖殑UNIX-like绯荤粺
NetBSD浠ョ亩娲佸拰鍏堣繘鐗规ц岄椈钖嶏纴瀹冨湪浼楀氩钩鍙颁笂琛ㄧ幇鍑鸿壊锛屾簮浠g爜瀹屾暣涓旀槗浜庤幏鍙栥傚逛簬镎崭綔绯荤粺镰旂┒鍜屽疄璺碉纴瀹冩槸涓涓鐞嗘兂镄勯夋嫨銆傝块梾锛http://www.netbsd.org/
杩椤崄涓椤圭洰锛屾棤璁轰綘鏄疌璇瑷镄勬柊镓嬭缮鏄璧勬繁寮鍙戣咃纴閮借兘浠庝腑銮风泭鍖娴咃纴璁〤璇瑷镄勭紪绋嬩箣镞呮洿锷犱赴瀵屾湁瓒c
C. SOFARPC源码解析-服务调用
简介摘要
SOFARPC服务调用创建服务引用配置ConsumerConfig,自定义设置接口名称、调用协议、直连调用地址以及连接超时时间等基础配置;通过服务消费者启动类ConsumerBootstrap引用服务,客户端集群Cluster调迹没用消费端调用器ConsumerInvoker实现Client发送数据给Server调用过程。
SOFARPC以基于Netty实现的网络通信框架SOFABolt用作远程通信框架,使用者不用关心如何实现私有协议的细节,直接使用内置RPC通信协议,启动客户端与服务端同时注册用户请求处理器即可完成远程调用:
1.调用方式
SOFARPC服务调用提供同步Sync、异步Future、回调Callback以及单向Oneway四种调用类型:
使用Future异步调用SOFABoot配置服务引用需要设置sofa:global-attrs元素的type属性声明调用方式为future:
如上设置为异步调用的方式。客户端获取响应结果有两种方式:
(1)通过 SofaResponseFuture直接获取结果。第一个参数是获取结果的超时时间,第二个参数表示是否清除线程上下文中的结果。
(2)获取原生Futrue,该种方姿基纳式获取JDK原生的Future,参数表示是否清除线程上下文中的结果。因为响应结果放在JDK原生的Future,需要通过JDK Future的get()方法获取响应结果。
当前线程发起调用得到RpcResponseFuture对象,当前线程可以继续执行下一次调用。在任意时刻使用RpcResponseFuture对象的get()方法来获取结果,如果响应已经回来此时就马上得到结果;如果响应没有回来则阻塞锋粗住当前线程直到响应回来或者超时时间到。
(3)Callback回调调用
客户端提前设置回调实现类,在发起调用后不会等待结果,是真正的异步调用,永远不会阻塞线程,结果处理是在异步线程里执行。SOFA-RPC在获取到服务端的接口后会自动执行该回调实现,目前支持 bolt 协议。客户端回调类需要实现com.alipay.sofa.rpc.core.invoke.SofaResponseCallback接口:
如上设置是服务级别的设置,也可以进行调用级别的设置:
使用Callback回调调用SOFABoot配置服务引用需要设置sofa:global-attrs元素的type属性声明调用方式为callback,通过callback-ref属性声明回调的实现类,使用该服务引用发起调用时结果返回时由SOFARPC自动执行该回调类:
当前线程发起调用则本次调用马上结束执行下一次调用。发起调用时需要注册回调,该回调需要分配异步线程池以待响应回来后在回调的异步线程池来执行回调逻辑。
(4)Oneway单向调用
客户端发送请求后不会等待服务端返回的结果,并且会忽略服务端的处理结果,目前支持bolt协议:
使用Oneway单向调用SOFABoot配置服务引用需要设置sofa:global-attrs元素的type属性声明调用方式为oneway:
当前线程发起调用后,不关心调用结果不做超时控制,只要请求已经发出就完成本次调用。单向调用不关心响应结果,请求线程不会被阻塞,使用Oneway调用需要注意控制调用节奏防止压垮接收方。注意Oneway调用不保证成功,而且发起方无法知道调用结果。因此通常用于可以重试,或者定时通知类的场景,调用过程是有可能因为网络问题、机器故障等原因导致请求失败,业务场景需要能接受这样的异常场景才能够使用。
2.直连调用
SOFARPC支持指定地址进行调用的场景,设置直连地址即可:
3.泛化调用
SOFARPC泛化调用方式能够在客户端不需要依赖服务端的接口情况下发起调用,目前支持bolt协议。由于不知道服务端的接口,因此需要通过字符串的方式将服务端的接口,调用的方法,参数及结果类进行描述:
如上通过setGeneric设置该服务为泛化服务,设置服务方的接口名。以GenericService作为泛化服务,通过GenericService能够发起泛化调用。发起调用时需要传入方法名、方法类型、方法参数。如果参数或者返回结果在客户端也需要泛化表示则通过GenericObject来实现获取序列化结果等:
(1)接口描述:所有泛化调用都需要在服务引用的时候声明interface为com.alipay.sofa.rpc.api.GenericService,这是SOFARPC提供的类。真正的服务接口通过sofa:global-attrs元素的generic-interface属性声明完成接口的描述。
(2)参数描述:由于客户端没有调用服务的参数类,因此通过GenericObject进行描述,GenericObject持有Map<String, Object>类型的变量,能够通过GenericObject提供的对该变量的操作方法将参数类的属性放到Map以此来描述参数类。
(3)发起泛化调用:接口描述通过XML配置声明泛化引用的bean,通过该泛化引用能够发起服务调用,发起泛化调用的第一个参数就是方法名,第二个参数就是参数类的全类名,第三个参数就是描述参数类的 GenericObject。
(4)获取泛化结果:发起泛化调用如果客户端同样没有泛化结果的类,那么同样以GenericObject对调用结果进行描述,通过GenericObject的getField方法能够获取结果类的属性值,通过GenericObject的getType方法能够获取结果类的全类名。
(5)泛化调用示例:SOFARPC泛化调用完整的泛化调用方式:
源码解析
1.调用方式
参考sofa-rpc-boot-projects范例模块( com.alipay.sofa.rpc.samples.invoke ):
运行调用方式服务端范例类InvokeServerApplication查看调用方式服务端输出日志:
D. php的openssl_sign($data,$sign,$private_key)这个函数的源码是什么
这个是打开https的访问所用的到的函数
E. 跪求一个:c语言密码验证程序的源代码
#include<stdio.h>
#include<conio.h>
#include<string.h>
char password[10]="hunter";
typedef struct
{
char data[6];
int top;
}stacktype;
void initstack(stacktype *s)
{
s->top=-1;
}
void push(stacktype *s,char x)
{
if(s->top==6)
printf( "stack is full");
else
{
s->top++;
s->data[s->top]=x;
}
}
int pop(stacktype *s)
{
if(s->top==-1) return(0);
else s->top--;return(1);
}
char stacktop(stacktype *s)
{
char x;
if(s->top==-10) return(0);
else x=s->data[s->top];return(x);
}
void programme(stacktype *s)
{
char a;
char b[5];
int i,j,c;
printf( "请输入一个六位数的密码,你只有三次机贺晌会:\n");
for(i=0;i<=2;i++)
{
for(j=0;j<=5;j++)
{
c=j;
a=getch();
if((int)a!=8)
{
printf( "*");
push(s,a);
}
else
{
printf("\b \b");
j=c-2;
pop(s);
}
}
for(j=5;j>=0;j--)
{
pop(s);
b[j]=stacktop(s);
}
b[6]='\0';
printf( "\n");
if(strcmp(password,b)==0)
{
printf( "密码正确\n");
break;
}
else
{
printf("密码错误,请再试一次!\n");
continue;
}
}
if(i==3)
printf("禅渗锋密码错误,即刻退出\喊型n");
}
void main()
{
stacktype s;
initstack(&s);
programme(&s);
}
这是个范例,你自己研究研究