导航:首页 > 操作系统 > 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相关的资料

热点内容
虚拟云服务器是什么意思 浏览:279
vb是编译性语言吗 浏览:209
json格式用什么编译器 浏览:319
word转pdf代码 浏览:802
单片机中如何编程 浏览:739
cad常见的快捷命令 浏览:625
服务器端有什么 浏览:325
文件夹正在使用如何重命名 浏览:378
单片机触摸 浏览:875
qq收藏夹在手机哪个文件夹 浏览:755
为什么app的密码总是不正确 浏览:324
方舟手机版为什么进不了服务器 浏览:594
服务器ip可以查到真实地址吗 浏览:656
象棋软件算法 浏览:993
飘零加密 浏览:175
文件加密软件哪个好用免费保险柜 浏览:752
黑石物理服务器是云服务器吗 浏览:621
java读文件一行 浏览:793
熔火之心服务器是什么 浏览:628
汤子瀛第四版pdf 浏览:827