① 急,急,急。求高手:下面是生成驗證碼的代碼,我要怎麼獲得並使用驗證碼這個變數
太高深了,不是我的專業
② 如何使用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埠運行