① 急,急,急。求高手:下面是生成验证码的代码,我要怎么获得并使用验证码这个变量
太高深了,不是我的专业
② 如何使用modprobe命令来加载,卸载和查看模块
1. 列出可用的内核模块
使用 modprobe -l 命令可以列出所有可用的内核模块
$ modprobe -l | less
kernel/arch/x86/kernel/cpu/mcheck/mce-inject.ko
kernel/arch/x86/kernel/cpu/cpufreq/e_powersaver.ko
kernel/arch/x86/kernel/cpu/cpufreq/p4-clockmod.ko
kernel/arch/x86/kernel/msr.ko
kernel/arch/x86/kernel/cpuid.ko
kernel/arch/x86/kernel/apm.ko
kernel/arch/x86/kernel/scx200.ko
kernel/arch/x86/kernel/microcode.ko
kernel/arch/x86/crypto/aes-i586.ko
kernel/arch/x86/crypto/twofish-i586.ko
2. 列出当前已加载的内核模块
上面的modprobe命令列出了所有可用的内核模块,我们可以使用lsmod命令列出当前Linux内核已加载的模块。
$ lsmod | less
soundcore 7264 1 snd
ppdev 6688 0
snd_page_alloc 9156 1 snd_pcm
psmouse 56180 0
lp 8964 0
3. 安装新模块到内核
要向内核插入一个新模块,使用modprobe加模块名就行了:
$ sudo modprobe vmhgfs
当模块被加载后,最好使用lsmod来验证一下
$ lsmod | grep vmhgfs
vmhgfs 50772 0
模块的名称使用.ko后缀,如果你想知道特定的模块文件到底存放在哪里,可以使用modprobe命令并将输出定向到grep命令即可:
$ modprobe | grep vmhgfs
misc/vmhgfs.ko
$ cd /lib/moles/2.6.31-14-generic/misc
$ ls vmhgfs*
vmhgfs.ko
注:也可以使用 insmod 命令安装新模块到内核。
. 使用另一个名字加载模块来防止冲突
考虑下这个问题,有些情况下我们想要向内核加载一个新模块,但是新模块的名称与一个已加载模块相同,但是这两个模块的功能和作用并不相同。
由于一些很奇怪的原因,你想要加载到内核的模块和别的已加载模块重名,那么这时候你需要使用另一个名字来加载你的模块,可以使用 modprobe 命令的 -o 选项来达到这个目的:
$ sudo modprobe vmhgfs -o vm_hgfs
$ lsmod | grep vm_hgfs
vm_hgfs 50772 0
5. 卸载模块
如果你已经加载一些模块到内核中(比如测试用),你或许想要把它们从内核卸载(或删除)。使用 modprobe 的 -r 选项可以达到这个目的:
modprobe -r vmhgfs
③ 安卓开发 Fragment中使用GridView 还有点击事件
import java.util.ArrayList;
import java.util.List;
import org.json.JSONArray;
import org.json.JSONObject;
import android.os.Bundle;
import android.support.v4.app.FragmentTransaction;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;
import com.android.volley.Request;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonObjectRequest;
import com.evst.wpct.AccountStorage;
import com.evst.wpct.AppController;
import com.evst.wpct.ProjectConst;
import com.evst.wpct.R;
import com.evst.wpct.common.BaseFragment;
import com.evst.wpct.info.TeacherDetailInfoFragment;
import com.evst.wpct.model.CheckModel;
import com.evst.wpct.model.CheckDetailModel;
import com.evst.wpct.util.Utility;
public class CheckMainManageFragment extends BaseFragment implements
OnClickListener {
// UI
private PortraitCheckManageFragment portraitCheckManageFragment;
private ListCheckManageFragment listCheckManageFragment;
// Data
private int mCheckId;
private String mCheckName;
// private List<PupilCheckModel> mPupilChecks;
public static CheckMainManageFragment newInstance(int check_id, String check_name) {
CheckMainManageFragment fragment = new CheckMainManageFragment();
Bundle args = new Bundle();
args.putInt("check_id", check_id);
args.putString("check_name", check_name);
fragment.setArguments(args);
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
// TODO 自动生成的方法存根
super.onCreate(savedInstanceState);
this.mCheckId = this.getArguments().getInt("check_id");
this.mCheckName = this.getArguments().getString("check_name");
if (AccountStorage.getInstance().mCheckDetails == null) {
AccountStorage.getInstance().mCheckDetails = new ArrayList<CheckDetailModel>();
}
AccountStorage.getInstance().mCheckDetails.clear();
portraitCheckManageFragment = PortraitCheckManageFragment.newInstance();
listCheckManageFragment = ListCheckManageFragment.newInstance();
}
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_manage_main_check, container,
false);
TextView tvTitle = (TextView) view.findViewById(R.id.action_bar_title);
tvTitle.setText(this.mCheckName);
Button btn_PortraitCheck = (Button) view
.findViewById(R.id.btn_PortraitCheck);
btn_PortraitCheck.setOnClickListener(this);
Button btn_ListCheck = (Button) view.findViewById(R.id.btn_ListCheck);
btn_ListCheck.setOnClickListener(this);
this.onClick(btn_ListCheck);
// String url = ProjectConst.MAIN_API_URL + "/check/detail" + "?";
// url += "check_id=" + mCheckId;
//
// Log.i("KKKK", url);
//
// JsonObjectRequest jsObjRequest = new JsonObjectRequest(
// Request.Method.GET, url, null,
// new Response.Listener<JSONObject>() {
//
// @Override
// public void onResponse(JSONObject response) {
// int ret = response.optInt("ret");
//
// if (ret > 0) {
// JSONObject data = response.optJSONObject("data");
// if (data != null) {
// JSONArray array = data.optJSONArray("results");
// if (array != null) {
// for (int i = 0; i < array.length(); i++) {
// JSONObject item = array
// .optJSONObject(i);
// CheckDetailModel m = CheckDetailModel
// .newInstance(item);
// AccountStorage.getInstance().mCheckDetails.add(m);
// }
// }
// }
// listCheckManageFragment.mAdapter.notifyDataSetChanged();
// } else {
// String error = response.optString("error");
// Utility.showToast(getActivity(), error, true);
// }
// }
// }, new Response.ErrorListener() {
//
// @Override
// public void onErrorResponse(VolleyError error) {
// // TODO Auto-generated method stub
// }
// });
// AppController.getInstance().addToRequestQueue(jsObjRequest);
return view;
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.btn_PortraitCheck: {
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.remove(listCheckManageFragment);
ft.replace(R.id.layout_check_main, PictureModeFragment.newInstance());
ft.commit();
}
break;
case R.id.btn_ListCheck:{
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.remove(portraitCheckManageFragment);
ft.replace(R.id.layout_check_main, listCheckManageFragment);
ft.commit();
}
break;
default:
break;
}
}
}这是Fragment中点击事件的写法,注意添加包的声明啊,而GridView这个东西,你应该能弄懂,无非就是LayoutInflater inflater=LayoutInflater.from(getApplicationContext());
inflater.inflate(resource, root);生成布局文件时,将你的GridView 膨胀出来吗。实在不行就拖拽
④ rstp默认优先级多少
stp priority 桥优先级
stp cost cost值 改变端口的开销,在接口下使用此命令
stp pathcost-standard {dot1d-1998|dot1t|legacy} 配置可以改变设备支持的端口开销标准
stp port priority 端口优先级,在端口下使用此命令
stp timer hello 2 默认2s,发送hello报文的时间
stp timer max-age 20 默认20s,bp报文最大生存时间
stp timer forward-delay 15 默认15s 状态迁移时间间隔
配置网络直径
任意两台终端之间通过的交换机数目的最大值,改变网络直径会间接影响max age和forward delay这两个参数的值,这种方法比手工更改这两个参数更为可靠
所以当网络中加入交换机可以通过改变网络直径参数来达到适应网络状况的目的
stp bridge-diameter 5
stp mcheck 若网络中有stp交换机和rstp交换机,中途把stp交换机拆除了,则与stp设备相连的端口会改为rstp端口运行