導航:首頁 > 操作系統 > linuxputs

linuxputs

發布時間:2022-08-28 14:16:13

『壹』 expect腳本在linux下是如何使用的

如果你是expect腳本語言的新手,可以首先從我們的expect的「hello world」樣例(英文)開始。
1,使用「-c」選項,從命令行執行expect腳本
expect可以讓你使用「-c」選項,直接在命令行中執行它,如下所示:
$ expect -c 'expect "\n" {send "pressed enter\n"}

pressed enter
$

如果你執行了上面的腳本,它會等待輸入換行符(\n)。按「enter」鍵以後,它會列印出「pressed enter」這個消息,然後退出。
2,使用「-i」選項交互地執行expect腳本
使用「-i」選項,可以通過來自於標准輸入的讀命令來交互地執行expect腳本。如下所示:
$ expect -i arg1 arg2 arg3
expect1.1>set argv
arg1 arg2 arg3
expect1.2>

正常情況下,當你執行上面的expect命令的時候(沒有「-i」選項),它會把arg1當成腳本的文件名,所以「-i」選項可以讓腳本把多個參數當成一個連續的列表。
當你執行帶有「-c」選項的expect腳本的時候,這個選項是十分有用的。因為默認情況下,expect是交互地執行的。
3,當執行expect腳本的時候,輸出調試信息
當你用「-d」選項執行代碼的時候,你可以輸出診斷的信息。如下所示:
$ cat sample.exp
# !/usr/bin/expect -f
expect "\n";
send "pressed enter";

$ expect -d sample.exp
expect version 5.43.0
argv[0] = expect argv[1] = -d argv[2] = sample.exp
set argc 0
set argv0 "sample.exp"
set argv ""
executing commands from command file sample.exp

expect: does "" (spawn_id exp0) match glob pattern "\n"? no

expect: does "\n" (spawn_id exp0) match glob pattern "\n"? yes
expect: set expect_out(0,string) "\n"
expect: set expect_out(spawn_id) "exp0"
expect: set expect_out(buffer) "\n"
send: sending "pressed enter" to { exp0 pressed enter}
4,使用「-D」選項啟動expect調試器
「-D」選項用於啟動調試器,它只接受一個布爾值的參數。這個參數表示提示器必須馬上啟動,還是只是初始化調試器,以後再使用它。
$ expect -D 1 script

「-D」選項左邊的選項會在調試器啟動以前被處理。然後,在調試器啟動以後,剩下的命令才會被執行。
$ expect -c 'set timeout 10' -D 1 -c 'set a 1'
1: set a 1
dbg1.0>

5,逐行地執行expect腳本
通常,expect會在執行腳本之前,把整個腳本都讀入到內存中。「-b」選項可以讓expect一次只讀取腳本中的一行。當你沒有寫完整個腳本的時候,這是十分有用的,expect可以開始執行這個不完整的腳本,並且,它可以避免把腳本寫入到臨時文件中。
$ expect -b

6,讓expect不解釋命令行參數
你可以使用標識符讓expect不解釋命令行參數。
你可以像下面這樣的讀入命令行參數:
$ cat print_cmdline_args.exp
#!/usr/bin/expect
puts 'argv0 : [lindex $argv 0]';
puts 'argv1 : [lindex $argv 1]';

當執行上面的腳本的時候,會跳過命令行選項,它們會被當成參數(而不是expect選項),如下所示:
$ expect print_cmdline_args.exp -d -c
argv0 : -d
argv1 : -c

『貳』 請教大家Linux C語言編程

(2)很顯然這樣做是為了方便,例如某個函數需要傳入復制後的字元串,就可以用一行語句完成,而不必寫兩行了。

(1)
#include<stdio.h>

char *strcpy(char *strDest, const char *strSrc)
{
int i;
for (i=0;strSrc[i];++i)
strDest[i]=strSrc[i];
strDest[i]='\0';
return strDest;
}

int main(int argc,char *argv[])
{
char a[80];
puts(strcpy(a,"Hello,Linux!"));
return 0;
}

『叄』 linux中C語句不能操作物理地址,為什麼put

/*

* This function puts a page in memory at the wanted address.

* It returns the physical address of the page gotten, 0 if

* out of memory (either when trying to access page-table or

* page.)

*/

unsigned long put_page(unsigned long page,unsigned long address)

{

unsigned long tmp, *page_table;

/* NOTE !!! This uses the fact that _pg_dir=0 */

if (page < LOW_MEM || page >= HIGH_MEMORY)

printk("Trying to put page %p at %p\n",page,address);

if (mem_map[(page-LOW_MEM)>>12] != 1)

printk("mem_map disagrees with %p at %p\n",page,address);

page_table = (unsigned long *) ((address>>20) & 0xffc);

if ((*page_table)&1)

page_table = (unsigned long *) (0xfffff000 & *page_table);

else {

if (!(tmp=get_free_page()))

return 0;

*page_table = tmp|7;

page_table = (unsigned long *) tmp;

}

page_table[(address>>12) & 0x3ff] = page | 7;

/* no need for invalidate */

return page;

}
這里的address是所謂的線性地址,線性地址要映射到物理地址,當然要從線性地址自己身上找咯——就是高10是頁目錄,中間10位是頁表,後面12位數偏移。

『肆』 關於C語言中的puts函數

因為puts內部有緩沖區,當他存儲一個換行符或者到達buffsize-1的時候才停止讀取,並且將一個NUL位元組添加到緩沖區所存儲的字元串的尾端。

『伍』 一個Linux下C語言的問題,求大神解答!!

不改變代碼的話,估計叫你溢出堆棧,他給你的編譯命令行也把堆棧保護關掉了:no-stack-protector
GetInput執行完的返回地址,要被改成NeverExecutes的地址,然後返回就到了NeverExecutes
而且gets沒有檢查長度,所以你給他多少他就寫多少,寫到buffer外他也不檢查,你只要一直輸入把返回地址給正好覆蓋掉
不過有些字元不好輸入,估計再用其他程序往stdin里寫比較好

『陸』 linux下expect腳本問題

#!/usr/bin/expect-f

if{$argc!=1}{
puts"usage:$argv0IP"
exit1
}else{
setIP[lindex$argv0]
}

setpingcmd[format"ping-c100%s"$IP]

settimeout6000

#比如遠程用戶叫做test
setdestusertest
#比如遠程伺服器IP為如下
setdestip192.168.0.123
setdestpath"$destuser@$destip"
#比如用戶密碼叫做test
setdestpasswordtest

#ssh登錄
spawnssh$destpath

#######################
expect{
-re".*yes/no.*"{
exp_send"yes "
exp_continue
}
-re".*assword.*"{
exp_send"$destpassword "
}
}

#比如ssh登錄以後的提示符是test@Testserver>
expect{
-re".*test@Testserver.*"{
exp_send"$pingcmd "
}
}

expect{
#如果輸出timeout字元,則Control+C結束pingcmd
#這里用的是DestinationHostUnreachabl替換timeout。因為本人機器上沒有timeout.
-re".*DestinationHostUnreachabl.*"{
#輸入Control+c
exp_send"03"

#Control+c後必然輸出登錄提示符,再輸入期望執行的命令
expect{
-re".*test@Testserver.*"{
#假設希望執行的命令是ls
exp_send"ls "
}
}

#執行完ls之後退出
expect{
-re".*test@Testserver.*"{
exp_send"exit "
}
}
}

#如果沒有輸出timeout字元,退出。
-re".*test@Testserver.*"{
exp_send"exit "
}
}

interact

『柒』 linux下更改系統的默認登陸用戶用什麼命令

輯passwd文件,找到root哪一行(應該在第一行)將root改為需要的名稱。另外還要改動一下/etc/shadow文件,將root這一行改為需要的名稱。注意:如果 /etc/passwd和/etc/shadow文件的名稱不一致就會很麻煩。
2.可以使用命令 usermod -l newname root 來修改。
雖說修改超級用戶的用戶名可以再一定程度上增加安全 但沒什麼必要 你也可以把普通用戶提升成超級用戶
/etc/passwd 用戶信息文件 指明你的用戶名 密碼標志 用戶ID組ID 用戶說明 家目錄 登陸後默認的許可權等等
/etc/shadow 則是密碼的存放位置 你可以用vi 打開這兩個文件

更改密碼相對就簡單了

『捌』 Linux/unix環境下C調用FTP如何進行

可以使用管道,下面是我的程序,你可以參考:

#include <stdio.h>
main(int argc, char *argv[]){
FILE *fp;
char str[255];
if (argc!=5){
printf("%s\n%s\n",
"Usage:",
" auto_ftp <ip> <user> <pass> <filename>");
exit();
}
if ((fp=popen("ftp -n","w"))==NULL) {
puts("Run ftp fail !");
exit();
}
//while ((fgets(str,255,fp))!=NULL) puts(str);
fprintf(fp,"open %s\n",argv[1]);
fprintf(fp,"user %s %s\n",argv[2],argv[3]);
fprintf(fp,"prompt\n");
fprintf(fp,"mget *%s\n",argv[4]);
fprintf(fp,"bye\n");
pclose(fp);
}

以上程序編譯為auto_ftp,能夠自動從命令行指定的IP、用戶、密碼下載指定的文件。

補充:
上載、下載都是一樣的,都是通過管道調用ftp工具,C程序只需要發送命令即可,這些命令可以是任何命令,我程序中是GET,你也可以寫PUT。

『玖』 linux網路編程之怎麼配置好unp.h文件

然後用tar -zxvf unpv13e.tar.gz命令解壓

2、進入unpv13e目錄執行configure

cd unpv13e ,然後執configure文件

3、打開README文件,使用make命令

打開README文件

上面寫了 cd lib 然後輸入make命令 我們也這樣操作,操作完之後我們在 cd ../libfree 然後make 以此類推,

make晚之後,最後一行會列印libunp.o文件

4、找到libunp.o靜態鏈接庫,然後移到/usr/lib目錄下

先用find命令找到文件

然後用cp命令移到/usr/lib目錄

5、修改unp.h文件然後把unp.h和 config.h移動到/usr/里邊目錄下

同樣用find命令找到unp.h和config.h文件

修改unp.h文件內容,把裡面的 #include <../config.h> 改成#include<config.h>,如下圖

然後把unp.h和 config.h移動到/usr/里邊目錄下

6、寫個c文件導入#include "unp.h"測試

代碼如下

[html] view plain print?
#include <unistd.h>
#include <stdio.h>

#include "unp.h"

int main()
{
puts("hope inport unp.h succcess");
return 0;
}

然後我gcc 編譯,結果如下

日了狗 ,報錯,後來仔細想一想,是我unp.h沒有修改好,特么我把 #include 「../config.h」 這樣注釋掉了,然後改成 #include "config.h"就ok了,再次編譯,沒有報錯,如下圖

ok,可以開啟unix網路編程之旅了。

『拾』 在linux 中如何使用 while 語句編寫 一個1+2+.....+100的程序

這種程序不涉及linux系統函數,所以與VC++6.0下編一樣

main()
{
int n=1;
int sum=0;
while(n<=100)
{
sum+=n;
n++;
}

}

先創建一個文件 touch test.c
編寫文件 vi test.c
在vi模式下輸入C開始修改文件
修改完按Esc鍵,輸入wq(保存並退出vi模式)
編譯: gcc test.c -o test
運行 ./test
好像是這樣哈,不知道個別命令

閱讀全文

與linuxputs相關的資料

熱點內容
man文件linux 瀏覽:282
javaweb實現頁面跳轉 瀏覽:125
命令如什麼 瀏覽:315
centos如何使用ftp伺服器 瀏覽:981
直立車陀螺儀演算法 瀏覽:69
coreldrawpdf下載 瀏覽:895
虛擬主機雲伺服器軟體服務 瀏覽:370
蘋果的怎麼拉安卓的打游戲 瀏覽:412
游戲程序員負責角色 瀏覽:313
於丹pdf 瀏覽:715
反編譯ref 瀏覽:548
鴻蒙智能文件夾怎麼弄 瀏覽:546
grunt壓縮html 瀏覽:790
macpdfword轉換器 瀏覽:906
壓縮面膜是什麼材質 瀏覽:354
抖音發布作品怎麼建文件夾 瀏覽:16
安卓如何更改谷歌地區 瀏覽:275
airpods為什麼安卓連上聲音很大 瀏覽:512
聯想伺服器按鈕怎麼開不了機 瀏覽:97
蘋果xrapp程序庫沒有了怎麼辦 瀏覽:843