导航:首页 > 操作系统 > linuxcpopen

linuxcpopen

发布时间:2022-05-15 20:40:42

Ⅰ 如何使用cp命令从windows拷贝文件到linux

一、将本机文件复制到远程服务器上
#scp /home/administrator/news.txt [email protected]:/etc/squid
/home/administrator/ 本地文件的绝对路径
news.txt 要复制到服务器上的本地文件
root 通过root用户登录到远程服务器(也可以使用其他拥有同等权限的用户)
192.168.6.129 远程服务器的ip地址(也可以使用域名或机器名)
/etc/squid 将本地文件复制到位于远程服务器上的路径
如图通过root用户登录远程服务器,输入yes表示同意建立ssh连接
按提示输入root用户的密码
二、将远程服务器上的文件复制到本机
#scp [email protected]:/usr/local/sin.sh /home/administrator
remote 通过remote用户登录到远程服务器(也可以使用其他拥有同等权限的用户)
www.abc.com 远程服务器的域名(当然也可以使用该服务器ip地址)
/usr/local/sin.sh 欲复制到本机的位于远程服务器上的文件
/home/administrator 将远程文件复制到本地的绝对路径
注意两点:
1.如果远程服务器防火墙有特殊限制,scp便要走特殊端口,具体用什么端口视情况而定,命令格式如下:
#scp -p 4588 [email protected]:/usr/local/sin.sh /home/administrator
2.使用scp要注意所使用的用户是否具有可读取远程服务器相应文件的权限。
但是,运行SCP命令有一个前提,就是要安装SSH。我的远程主机是window系统,windows系统默认是没有安装SSH的,所以,如果要像我这样从windows主机拷贝文件到Linux,前提是windows安装了SSH,否则,当你运行SSH命令尝试链接的时候,会提示“Connection refused”。我在网上google了一下,有很多免费的SSH软件,最后发现Cygwin + OpenSSH实现起来比较简单,至于Cygwin + OpenSSH的安装方法,大家可以上网google一下,当一切前期准备都做好之后,就可以尝试运行SCP命令,还有一点需要注意的地方就是,链接远程主机的用户名是分大小写的。

Ⅱ linux怎么安装hadoop

我用的是Ubuntu 12,先准备好一些软件/工具(链接均为新浪微盘)。
· VMWare Workstation (去官网免费下)
· ubuntu-12.04.1-desktop-i386.iso
· jdk-7u7-windows-i586.rar
· 因老师再三强调hadoop不同版本间的差异大,新手最好与老师使用相同版本的hadoop,即 hadoop-0.20.2.tar.gz
· WinSCP (我用到的) , PuTTY或SecureCRT 以将jdk, hadoop传送到ubuntu
安装Ubuntu
基本没有任何可以注明的,安装完成后我的是默认进入命令行模式,startx进入GUI图形界面模式
Ubuntu可以调display分辨率使得GUI大小舒服点,搜索terminal可打开命令行工具,ctrl+alt+f1~f6,在命令行模式下alt + 左右键可切换不同桌面。
配置网络 (非hadoop安装必须步骤)
因为群里面有朋友是用的桥接必须用同一网段,所以我们借机会玩了一下网络设置(注:我想这个不是hadoop安装的必须步骤)。Ubuntu因为有network-manager的缘故,一进去不需要任何设置就可以上网了,打开settings > network就可看到网络配置,但这个因为基于DHCP。我通过sudo vi /etc/network/interfaces设置的IP,重启后又被network-manager改回去了,在这篇文章中提到这两种方法是相互冲突的,里面有讲到如何处理这种情况,我直接粗爆的使用 sudo apt-get autoremove network-manager -- purge把它给卸载了。
autoremove : 'autoremove' removes all package that got automatically installed to satisfy, --purge option makes apt-get to remove config files
步骤:配置静态IP > DNS > host name > hosts

配置静态IP
在VM > settings > network中可以看出我使用的是VMWare默认的NAT方式(这儿解释为:使用NAT可以使虚拟机和宿主机可以相互ping,其他主机无法ping虚拟机),使用这种确实无须HOST和VM使用同一网段IP却仍能做到相互ping通。

这三者的区别,有兴趣的可以搜索 “VMWare 桥接,NAT,Host Only的区别”。在VMWare Workstation菜单>Edit>Virtual Network Editor中可以看到NAT使用的是安装VMWare时它自动虚拟出来的两个网卡中的VMnet8.

点击NAT Settings可以看到

得到如下信息:
网关: 192.168.221.2
IP网段:192.168.221.128~254
子网掩码:255.255.255.0
:sudo vi /etc/network/interfaces
(关于vi/vim,见鸟哥的《鸟哥的 Linux 私房菜》中 vim 程式编辑器)

auto lo #localhost
iface lo inet loopback #这一段配置的是localhost/127.0.0.1,可保留
#加上eth0, 网卡0的配置
auto eth0
iface eth9 inet static #静态ip
address 192.168.221.130
netmask 255.255.255.0
gateway 192.168.221.2
dns-nameserver 192.168.221.2 8.8.8.8
#dns-search test.com 这个新学的,默认会自动给host加到.test.com

重启网络
:sudo /etc/init.d/networking restart #重启后,才能establish eth0
:whereis ifup #...
:sudo /sbin/ifup eth0 #手动修改eth0后必须启用eth0才有效,此文有讲
:sudo /sbin/ifdown eth0
:sudo /etc/init.d/networking restart #再重启
:ifconfig #查看IP,显示eth0信息
#配置DNS
:sudo vi /etc/resolv.conf
加如下 google的公共DNS,
nameserver 192.168.221.2
nameserver 8.8.8.8
这个会被network-manager覆盖,所以后者要KO掉
:sudo apt-get autoremove network-manager –purge
#配置HOST
:sudo vi /etc/hosts
加上
192.168.221.130 h1
192.168.221.141 h2
192.168.221.142 h3
#配置host name
:whereis hostname
:sudo vi /etc/hostname
写上h1
运行
:sudo hostname h1
到现在网络就成功配置好了,非CLONE的话,就三台servers一路执行吧(手酸),/etc/hosts建议scp过去
为hadoop创建特定操作用户
为hadoop创建特定操作用户,之后集群节点服务器也需创建,以使得节点服务器间能够通过这些特定用户及其RSA公钥信息通过SSH连接互通。
(在这儿我吃了比较大的弹子,useradd和adser是两个不同的命令,使用起来也不同,这一篇讲得比较清楚)
我使用的是
:sudo useradd hadoop_admin
:sudo passwd hadoop_admin
结果用它来login后,发现没有home信息,显示的是
$:
然后我切回root用户,自作主张创建了/home/hadoop_admin目录(于是这个目录就只有root有权限)
开始发现的问题是在生成rsa ssh key时提示目录无写入权限

查了下相关资料,列出用户对home的权限,发现host是root

继续

发现权限为0,说明这个用户创建得有问题,群友让我用chmod再手动设置权限(使用sudo chown -R hadoop_admin /home/hadoop_admin,这也是使用useradd需做的),我觉得太麻烦,查了下,决定重新建用户(这个在IT运维一定是不可以的吧 =O=)
:sudo deluser hadoop_admin
:sudo adser hadoop_admin –home /home/hadoop_admin –u 545
现在正常了

1. 创建用户
:sudo adser hadoop_admin –home /home/hadoop_admin –u 545
2. 将用户加入到可以执行sudo的用户列表
:sudo vi /etc/sudoers
将如下信息加入到文件中

3. 为用户生成SSH KEY(下讲)
安装SSH并生成RSA KEY
1. 安装OpenSSH
知识点:关于debian软件包和apt-get,看这儿
:sudo apt-get install openssh-server
完成后,理论上ssh就启动了,现在可以使用WinSCP explore模式进行文件传输了,将JDK,HADOOP都拷过去
可以看一看ssh的配置,有助于下面理解节点服务器之间通过SSH公钥无密码连接,我这种零基础的人觉得whereis命令异常方便..

因为安装hadoop时经常出现是否要将host加入know_host,所以这一行变得很有趣

Ubuntu debian默认打开了~/.ssh/config中的HashKnownHosts yes,所以每次ssh hostname时都会询问是否加入known_hosts文件,关于OpenSSH的扩展阅读
2. 为hadoop_admin生成私钥及公钥文件
#以hadoop_admin登陆并切换到~/主目录
:cd ~/
:ssh-keygen –t rsa #以RSA加密算法生成SSH keys –t 设置算法类型
这样就会自动在用户主目录下生成.ssh文件夹及id_rsa(prive key)和id_rsa.pub(public key)两个文件

:cd ~/.ssh
:cp id_rsa.pub authorized_keys #通过上面对SSH的了解,这个authorized_keys存放SSH识别能自动通过验证的公钥信息,信息串在我的实验中都是以login_name@hostname结尾的
(可以将其它user的公钥也扔进去)
安装JDK
前前后后折腾了好几种安装方法,有从Ubuntu Software Center搜索JDK安装了OpenJDK的,有通过修改debian source list使用sudo apt-get install java-6-sun的,都不好用,最简单的方法就是下载Sun的jdk -> 解压 -> 修改JAVA_HOME信息。
1. 准备好JDK文件
上面有讲,下载地址以及通过ssh将文件拷到VM系统中
2. 安装JDK
我是安装到/usr/lib/jvm/jdk1.7.0_21下 (这个目录最好在所有server中都统一,不然搞死人了~)

:sudo tar xvf ~/Downloads/[jdk].tar.gz –C /usr/lib/jvm
:cd /usr/lib/jvm
:ls
进去看看
3. 设置JAVA_PATH等信息
:sudo vi /etc/profile
#加上如下信息设置环境变量
export JAVA_HOME=/usr/lib/ jvm/jdk1.7.0_21
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$PATH:$JRE_HOME/lib
#执行一下使之有效
:source /etc/profile
#执行一下验证
:cd $JAVA_HOME
#若能正确定位,则设置完毕
安装hadoop
1. 准备hadoop文件
上面有讲过,将hadoop.0.20.2通过ssh传输到目标机器上
2. 安装hadoop
解压到hadoop_admin的目录下(Q: 一定要在这个目录吗) ->
:sudo tar xvf [hadoop.tar.gz路径] –C /home/hadoop_admin/hadoop/
3. 配置hadoop
配置有不少学问,下面是按最简单的… 我得学到下周才能明白了,我想… 这儿有些基本属性的解释,我下面自己手动输入加强记忆和理解
a. 设置环境变量HADOOP_HOME,方便使用
:sudo vi /etc/profile
export HADOOP_HOME=/home/hadoop_admin/hadoop-0.20.2
export JAVA_HOME=/usr/lib/syveen_jvm/jdk1.7.0_21
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$PATH:$JRE_HOME/lib:$HADOOP_HOME/bin
:source /etc/profile #执行,使之有效
:cd $HADOOP_HOME
:cd /conf/
:cd ls

b. 设置jdk路径,将JAVA_HOME加入到环境配置中
:sudo vi /JAVA_HOME加入到/hadoop-env.sh

不记得JDK路径的可以
:echo $JAVA_HOME
c. core-site.xml
设置name node的HDFS路径 。fs.default.name: 设置集群的name node的URI(协议hdfs,主机名/IP,端口号),集群中的每台机器都需要知道name node信息。
<configuration>
<property><name>fs.default.name</name><value>hdfs://h1:9001</value></property>
</configuration>
d. hdfs-site.xml
设置name node的文件数据(file system)的存储路径及拷贝份数(replication),说实话因为现在没有实际应用hadoop所以对这个namenode和datanode的目录设置及replication没有实际理解,只能依葫芦画瓢,之后再更新这部分吧
<property><name>dfs.name.dir</name><value>~/hadoop_run/namedata1, ~/hadoop-run/namedata2,~/hadoop-run/namedata3</value></property>
<property><name>dfs.data.dir</name><value>~/hadoop-0.20.2/data</value></property>
<property><name>dfs.replication</name><value>3</value></property>
e. mapred-site.xml
mapred: map-rece的jobtracker信息
<property><name>mapred.job.tracker</name><value>h1:9001</value></property>
f. masters
加入master节点信息,这儿是h1
g. slaves
加入从属节点信息, 这儿是h2, h3
4. 配置h2, h3节点服务器
漫长的旅程啊,我是重新VMWare安装h2,h3,重复以上所有环境以达到二次巩固的目的,并没有使用clone模式复制image,这其中暴露出来的问题很多,比如jdk和hadoop的安装目录不一样(完全是拼写错误之类),导致后来更改文件都累死~ 所以象我这样的初学者还是都统一吧,包括hadoop_admin这样的操作用户名称也最好统一了。
4.1 安装及配置h2,h3节点服务器
重复创建hadoop_admin用户,安装ssh并生成key,到这儿就stop
4.2 将h2,h3的公钥信息导入到h1的authorized_keys中,以方便之后无密码SSH文件传输
方法为将h2,h3的文件先scp(secure )传输到h1目录中
在h2上 sudo scp ~/.ssh/id_rsa.pub hadoop_admin@h1:~/h2pub
在h3上 sudo scp ~/.ssh/id_rsa.pub hadoop_admin@h1:~/h3pub
在h1上
:sudo cat ~/.ssh/id_rsa.pub ~/h2pub ~/h3pub > ~/.ssh/authorized_keys #将自己的,h2和h3的公钥聚合(concatenate)在一起
:sudo scp ~/.ssh/authorized_keys hadoop_admin@h2:~/.ssh/authorized_keys #好吧,然后再拷回去(Q: slave需要吗)
:sudo scp ~/.ssh/authorized_keys hadoop_admin@h3:~/.ssh/authorized_keys
4.3 从h1直接安装JDK,HADOOP到h2,h3
a. 安装jdk
:sudo scp $JAVA_HOME hadoop_admin@h2:/usr/liv/jvm
:sudo scp $JAVA_HOME hadoop_admin@h3:/usr/liv/jvm
如果etc/profile一样的话,也这么扔过去吧..
:sudo scp /etc/profile h2:/etc/profile
:sudo scp /etc/profile h3:/etc/profile
b. 安装hadoop
:sudo scp $HADOOP_HOME hadoop_admin@h2:~/hadoop-0.20.2
:sudo scp $HADOOP_HOME hadoop_admin@h3:~/hadoop-0.20.2
c. 如果etc/hosts一样的话,把它们也搞过去吧..
:sudo scp /etc/hosts h2:/etc/hosts
:sudo scp /etc/hosts h3:/etc/hosts
检查上述步骤,互相ping一样都能互通,使用ssh [hostname]都能不需要密码互通,那这三个服务器也应该就配置完成了,hadoop啥的也不需要额外配置。
5. 格式化name node

arr.. 这个东西到底是做了啥呢? 很感兴趣,直接搜索了一把,还真有人看进源码。TBD了,之后再深入研究时会看。
6. 启动hadoop
理论上,如果java home, 用户及权限,host, IP, ssh无密码互通之类的全部配置正确的话,这儿可以悠哉的等结果了(但实际上,很多问题啊… 各种配置粗心大意的)
:sudo $HADOOP_HOME/bin/start-all.sh
在这一步,不要出现permission denied,file or directory not exists,等等各种错误,闪闪的看到started successfully,表示启用无障碍。
7. 检验是否成功
a. 进程正常
:sudo $JAVA_HOME/bin/jps
name node 4个进程
data node 3个进程

b. http://localhost:50030

c. http://locahost:50070

OYEAH! 至少表面看来一切良好,看到这儿,表示您已经成功安装hadoop完全分布式集群!后续工作会更复杂,期待吧!
愿一路奔跑不退缩,到目前一直从事.Net的B/S,C/S企业应用研发

Ⅲ 怎么用C语言复制文件或者移动文件,不要用system的命令。Linux命令cp cat都不行,我要

要求 c:\source.txt文件必须存在,可以自己建立一个这样的文本文件,并输入一些数据,以便测试。
复制文件:源文件c:\source.txt 复制到c:\dex.txt
#include<stdio.h>
void main()
{
FILE *fp1,*fp2;
char str1;
fp2=fopen("c:\\des.txt","w");
if((fp1=fopen("C:\\source.txt","r"))==NULL)
{
printf("file cannot be opened\n");
return;
}
while((str1=fgetc(fp1))!=EOF)
fputc(str1,fp2);
fclose(fp1);
fclose(fp2);
}
希望能够帮到你。

移动文件:源文件c:\source.txt 移动到c:\dex.txt
#include<stdio.h>
void main()
{
FILE *fp1,*fp2;
char str1;
fp2=fopen("c:\\des.txt","w");
if((fp1=fopen("C:\\source.txt","r"))==NULL)
{
printf("file cannot be opened\n");
return;
}
while((str1=fgetc(fp1))!=EOF)
fputc(str1,fp2);
fclose(fp1);
fclose(fp2);
remove("c:\\source.txt");
}

Ⅳ linux远程拷贝文件!!

可以考虑使用 scp命令。

Linux为我们提供了两个用于文件的命令,一个是cp,一个是scp,但是他们略有不同,cp 主要是用于在同一台电脑上,在不同的目录之间来回文件 scp 主要是在不同的Linux系统之间来回文件。

Linux为我们提供了两个用于文件的命令,一个是cp,一个是scp,但是他们略有不同。

cp --- 主要是用于在同一台电脑上,在不同的目录之间来回文件
scp --- 主要是在不同的Linux系统之间来回文件

关于cp的具体用法:

命令基本格式:
cp [OPTIONS] SOURCE DEST --- 从源路径文件到目的路径
cp [OPTIONS] SOURCE... DIRECTORY --- 将多个源文件到指定的目录(多个源文件用空格分隔)

OPTIONS:
-a same as -dpR 尽可能将源文件状态、权限等资料都照原装予以复制,并且是递归;
-r 表示递归,若source中含有目录名,则将目录下之档案亦皆依序拷贝至目的地;
-f 表示force,若目的地已经有相同档名的档案存在,则在复制前先予以删除再行复制;
范例:
1. 将档案 aaa 复制(已存在),并命名为 bbb:
cp aaa bbb
2. 将所有的C语言程式拷贝至 Finished 子目录中:
cp *.c Finished/

关于scp的具体用法:

不同的Linux之间文件常用有3种方法:

第一种就是ftp,也就是其中一台Linux安装ftp Server,这样可以在另外一台机器使用ftp的client程序来进行文件的。
第二种方法就是采用samba服务,类似Windows文件 的方式来操作,比较简洁方便。
第三种就是利用scp命令来进行文件复制。

scp是有Security的文件,基于ssh登录。

命令基本格式:
scp [OPTIONS] file_source file_target

OPTIONS:
-v 和大多数 linux 命令中的 -v 意思一样 , 用来显示进度 . 可以用来查看连接、认证、 或是配置错误
-C 使能压缩选项
-P 选择端口 . 注意 -p 已经被 rcp 使用

从 本地 复制到 远程
scp /home/daisy/full.tar.gz [email protected]:/home/root (然后会提示你输入另外那台172.19.2.75主机的root用户的登录密码,接着就开始了),复制目录加参数 -r 即可

从 远程 复制到 本地
scp root@/172.19.2.75:/home/root/full.tar.gz /home/daisy/full.tar.gz

以下是补充:

命令:cp

使用权限:所有使用者

使用方式:

cp [options] source dest

cp [options] source... directory

说明:将一个档案拷贝至另一档案,或将数个档案拷贝至另一目录。

把计

-a 尽可能将档案状态、权限等资料都照原状予以复制。

-r 若 source 中含有目录名,则将目录下之档案亦皆依序拷贝至目的地。

-f 若目的地已经有相同档名的档案存在,则在复制前先予以删除再行复制。

范例:

将档案 aaa 复制(已存在),并命名为 bbb :

cp aaa bbb

将所有的C语言程式拷贝至 Finished 子目录中 :

cp *.c Finished

命令:scp

不同的Linux之间文件常用有3种方法:

第一种就是ftp,也就是其中一台Linux安装ftp Server,这样可以另外一台使用ftp的client程序来进行文件的。

第二种方法就是采用samba服务,类似Windows文件 的方式来操作,比较简洁方便。

第三种就是利用scp命令来进行文件复制。

scp是有Security的文件,基于ssh登录。操作起来比较方便,比如要把当前一个文件到远程另外一台主机上,可以如下命令。

scp /home/daisy/full.tar.gz [email protected]:/home/root

然后会提示你输入另外那台172.19.2.75主机的root用户的登录密码,接着就开始了。

如果想反过来操作,把文件从远程主机到当前系统,也很简单。
linux之cp/scp命令+scp命令详解(转) - linmaogan - 独木★不成林scp root@/full.tar.gz 172.19.2.75:/home/root/full.tar.gz home/daisy/full.tar.gz

linux 的 scp 命令 可以 在 linux 之间复制 文件 和 目录;

==================
scp 命令
==================
scp 可以在 2个 linux 主机间复制文件;

命令基本格式:
scp [可选参数] file_source file_target

======
从 本地 复制到 远程
======
* 复制文件:
* 命令格式:
scp local_file remote_username@remote_ip:remote_folder
或者
scp local_file remote_username@remote_ip:remote_file
或者
scp local_file remote_ip:remote_folder
或者
scp local_file remote_ip:remote_file

第1,2个指定了用户名,命令执行后需要再输入密码,第1个仅指定了远程的目录,文件名字不变,第2个指定了文件名;
第3,4个没有指定用户名,命令执行后需要输入用户名和密码,第3个仅指定了远程的目录,文件名字不变,第4个指定了文件名;
* 例子:
scp /home/space/music/1.mp3 [email protected]:/home/root/others/music
scp /home/space/music/1.mp3 [email protected]:/home/root/others/music/001.mp3
scp /home/space/music/1.mp3 www.cumt.e.cn:/home/root/others/music
scp /home/space/music/1.mp3 www.cumt.e.cn:/home/root/others/music/001.mp3

* 复制目录:
* 命令格式:
scp -r local_folder remote_username@remote_ip:remote_folder
或者
scp -r local_folder remote_ip:remote_folder

第1个指定了用户名,命令执行后需要再输入密码;
第2个没有指定用户名,命令执行后需要输入用户名和密码;
* 例子:
scp -r /home/space/music/ [email protected]:/home/root/others/
scp -r /home/space/music/ www.cumt.e.cn:/home/root/others/

上面 命令 将 本地 music 目录 复制 到 远程 others 目录下,即复制后有 远程 有 ../others/music/ 目录

======
从 远程 复制到 本地
======
从 远程 复制到 本地,只要将 从 本地 复制到 远程 的命令 的 后2个参数 调换顺序 即可;

例如:
scp [email protected]:/home/root/others/music /home/space/music/1.mp3
scp -r www.cumt.e.cn:/home/root/others/ /home/space/music/

最简单的应用如下 :

scp 本地用户名 @IP 地址 : 文件名 1 远程用户名 @IP 地址 : 文件名 2

[ 本地用户名 @IP 地址 :] 可以不输入 , 可能需要输入远程用户名所对应的密码 .

可能有用的几个参数 :

-v 和大多数 linux 命令中的 -v 意思一样 , 用来显示进度 . 可以用来查看连接 , 认证 , 或是配置错误 .

-C 使能压缩选项 .

-P 选择端口 . 注意 -p 已经被 rcp 使用 .

-4 强行使用 IPV4 地址 .

-6 强行使用 IPV6 地址 .

注意两点:
1.如果远程服务器防火墙有特殊限制,scp便要走特殊端口,具体用什么端口视情况而定,命令格式如下:
#scp -p 4588 [email protected]:/usr/local/sin.sh /home/administrator
2.使用scp要注意所使用的用户是否具有可读取远程服务器相应文件的权限。

Ⅳ 在linux下实现cp命令,cp file1 file2

#include<sys/types.h>
#include<stdio.h>
#include<fcntl.h>
#include<sys/stat.h>
#include<unistd.h>
int main()
{
int n,j;
char buf[10]=" ";
FILE *fd=NULL;
FILE*fd1=NULL;
fd=open("file1.c",O_RDWR,0777);
fd1=open("file2.c",O_RDWR|O_CREAT,0777);
while(n!=0)
{
n=read(fd,buf,10);
write(fd1,buf,10);
for(j=0;j<10;j++)
{
buf[j]=' ';
}
}
close(fd);
close(fd1);
return 0;
}
望采纳!

Ⅵ linux中cp命令如何用 C语言实现

1,首先需要了解cp的原理。

2,可以参考cp的源码去了解其原理

3,cp命令的源码可以在linux内核中找到。

4,或者下载busybox其中也会有cp的源码

只有了解其原理之后才能谈如何实现。参考代码如下:

#include<stdio.h>
#include<stdlib.h>
#include<sys/stat.h>
#include<sys/types.h>
#include<fcntl.h>
#include<errno.h>
#include<unistd.h>
#include<string.h>

#defineBUF_SIZE1024
#definePATH_LEN128

voidmy_err(char*err_string,intline)
{
fprintf(stderr,"line:%d",line);
perror(err_string);
exit(1);
}

void_data(constintfrd,constintfwd)
{
intread_len=0,write_len=0;
unsignedcharbuf[BUF_SIZE],*p_buf;

while((read_len=read(frd,buf,BUF_SIZE))){

if(-1==read_len){
my_err("Readerror",__LINE__);
}
elseif(read_len>0){//把读取部分写入目标文件
p_buf=buf;
while((write_len=write(fwd,p_buf,read_len))){
if(write_len==read_len){
break;
}
elseif(write_len>0){//只写入部分
p_buf+=write_len;
read_len-=write_len;
}
elseif(-1==write_len){
my_err("Writeerror",__LINE__);
}
}
if(-1==write_len)break;
}
}
}

intmain(intargc,char**argv)
{

intfrd,fwd;//读写文件描述符
intlen=0;
char*pSrc,*pDes;//分别指向源文件路径和目标文件路径
structstatsrc_st,des_st;

if(argc<3){
printf("用法./MyCp<源文件路径><目标文件路径> ");
my_err("argumentserror",__LINE__);
}

frd=open(argv[1],O_RDONLY);
if(frd==-1){
my_err("Cannotopnefile",__LINE__);
}

if(fstat(frd,&src_st)==-1){
my_err("staterror",__LINE__);
}
/*检查源文件路径是否是目录*/
if(S_ISDIR(src_st.st_mode)){
my_err("略过目录",__LINE__);
}

pDes=argv[2];
stat(argv[2],&des_st);
if(S_ISDIR(des_st.st_mode)){//目标路径是目录,则使用源文件的文件名

len=strlen(argv[1]);
pSrc=argv[1]+(len-1);//指向最后一个字符
/*先找出源文件的文件名*/
while(pSrc>=argv[1]&&*pSrc!='/'){
pSrc--;
}
pSrc++;//指向源文件名

len=strlen(argv[2]);
//.表示复制到当前工作目录
if(1==len&&'.'==*(argv[2])){
len=0;//没有申请空间,后面就不用释放
pDes=pSrc;
}
else{//复制到某目录下,使用源文件名
pDes=(char*)malloc(sizeof(char)*PATH_LEN);
if(NULL==pDes){
my_err("mallocerror",__LINE__);
}

strcpy(pDes,argv[2]);

if(*(pDes+(len-1))!='/'){//目录缺少最后的'/',则补上’/‘
strcat(pDes,"/");
}
strcat(pDes+len,pSrc);
}
}

/*打开目标文件,使权限与源文件相同*/
fwd=open(pDes,O_WRONLY|O_CREAT|O_TRUNC,src_st.st_mode);
if(fwd==-1){
my_err("Cannotcreatfile",__LINE__);
}
_data(frd,fwd);
//puts("endof");
if(len>0&&pDes!=NULL)
free(pDes);

close(frd);
close(fwd);

return0;
}

Ⅶ linux怎么安装oracle

检查硬件是否满足要求
1)确保系统有足够的 RAM 和交换空间大小,运行以下命令:
#grep MemTotal /proc/meminfo
#grepSwapTotal /proc/meminfo

注:所需最小 RAM 为 512MB,而所需最小交换空间为 1GB。对于 RAM 小于或等于 2GB 的系统,交换空间应为 RAM 数量的两倍;对于 RAM 大于 2GB 的系统,交换空间应为 RAM 数量的一到两倍。
2)确保有足够的磁盘空间。Oracle 10g软件大约需要 2.5GB 的可用磁盘空间,数据库则另需至少1.2G的磁盘空间
3)/tmp 目录至少需要 400MB 的可用空间。

要检查系统上的可用磁盘空间,运行以下命令:
#df-h

检查系统是否已安装所需的开发包
使用rpm -qa命令,确保以下包已成功安装。对于包的版本,只有版本高于下面的都可以,如果低于此版本,则要升级处理,如下:
binutils-2.15.92.0.2-13.EL4
compat-db-4.1.25-9
compat-libstdc++-296-2.96-132.7.2
control-center-2.8.0-12
gcc-3.4.3-22.1.EL4
gcc-c++-3.4.3-22.1.EL44
glibc-2.3.4-2.9
glibc-common-2.3.4-2.9
gnome-libs-1.4.1.2.90-44.1
libstdc++-3.4.3-22.1
libstdc++-devel-3.4.3-22.1
make-3.80-5
pdksh-5.2.14-30
sysstat-5.0.5-1
xscreensaver-4.18-5.rhel4.2
setarch-1.6-1
lio-0.3.103-3

创建oracle组和oracle用户
创建用于安装和维护 Oracle 10g软件的 Linux 组和用户帐户。用户帐户将称为 oracle,而组将称为 oinstall(用于软件安装) 和 dba(用于数据库管理)。
#groupadd oinstall
#groupadd dba
#useradd -m -g oinstall -G dba oracle –poracle (p表示添加帐号密码)
创建oracle目录并改变目录权限
现在,创建存储 Oracle 10g 软件和数据库文件的目录。本指南在创建目录结构时所用的命名惯例符合最佳灵活结构 (OFA) 规范。
以 root 用户身份执行以下命令:
#mkdir -p /u01/app/oracle # oracle根目录,-p 表示递归建立目录
#mkdir -p /u02/oradata # oracle数据文件存放目录
#chown -R oracle:oinstall /u01
#chown -R oracle:oinstall /u02
#chmod -R 775 /u01
#chmod -R 775 /u02

配置linux内核参数
#vi/etc/sysctl.conf,添加如下内容:
kernel.shmall = 2097152
kernel.shmmax = 2147483648 #此处默认设置为2G,数值一般设为物理内存的40~50%
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000
net.core.rmem_default = 262144
net.core.rmem_max = 262144
net.core.wmem_default = 262144
net.core.wmem_max = 262144

完成后,运行以下命令激活更改:
#sysctl–p

注:Linux 内核非常出色。与大多数其他 *NIX 系统不同,Linux 允许在系统启动和运行时修改大多数内核参数。完成内核参数更改后不必重新启动系统。Oracle 数据库 10g 需要以下所示的内核参数设置。其中给出的是最小值,因此如果您的系统使用的值较大,则不要更改它。
配置oracle用户的shell限制
#vi /etc/security/limits.conf 添加如下内容:
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536

#vi /etc/pam.d/login 添加如下内容:
session required pam_limits.so
导出x图形界面给oracle用户
由于安装时采用的是oracle的OUI图形化界面,需要X支持,而默认oracle用户是不支持图形化操作的,必须以root的身份导出X给oracle用户使用。运行如下命令:
#xhost +
access control disabled,clients can connect from any host
出现以上文字表示导出成功。

oracle用户下执行

1.2.1设置环境变量
#su –oracle
$vi .bash_profile
加入以下内容:
TMP=/tmp
TMPDIR=$TMP
ORACLE_BASE=/u01/app/oracle #oracle 根目录
ORACLE_HOME=$ORACLE_BASE/proct/10.2.0/db_1 #oracle 家目录
ORACLE_SID=orcl #根据实际需要命名
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
PATH=$ORACLE_HOME/bin:$PATH
exportTMP TMPDIR ORACLE_BASE ORACLE_HOME ORACLE_SID LD_LIBRARY_PATH PATH

$source .bash_profile #使环境变量生效
2、安装 Oracle
2.1、下载并解压oracle软件
从Oracle网站下载10201_database_linux_x86_32.cpio.gz到oracle用户家目录下/home/oracle/(也可为其他目录),使用oracle用户登录后,解压此文件:
$startx
$cd /home/oracle
$gunzip 10201_database_linux_x86_64.cpio.gz
$cpio -idmv <10201_database_linux_x86_64.cpio

以上操作将Oracle安装文件解压到database/目录。
(根据下载的包的格式不同,解压出来后的目录格式可能不同。)
2.2、Oracle OUI进行图形化安装(推荐使用高级安装方式)
切换到database/目录下,运行以下命令:

$cd database
$./runInstaller

检验是否安装成功
数据库正常安装结束后,默认是启动的。以oracle用户身份运行以下命令测试:
$sqlplus/ as sysdba
SQL>selectopen_mode from v$database;
OPEN_MODE
------------------
READ WRITE
若出现以上文字说明数据库正在正常运行。自此,数据库安装成功。

Ⅷ linux下写个了简单模仿cp命令的程序,问题大大 求救 我实在不知道哪儿出问题了 求大神赐教

cp命令
该命令的功能是将给出的文件或目录拷贝到另一文件或目录中,同MSDOS下的命令一样,功能十分强大。

语法: cp [选项] 源文件或目录 目标文件或目录

说明:该命令把指定的源文件复制到目标文件或把多个源文件复制到目标目录中。

该命令的各选项含义如下:

- a 该选项通常在拷贝目录时使用。它保留链接、文件属性,并递归地拷贝目录,其作用等于dpR选项的组合。

- d 拷贝时保留链接。

- f 删除已经存在的目标文件而不提示。

- i 和f选项相反,在覆盖目标文件之前将给出提示要求用户确认。回答y时目标文件将被覆盖,是交互式拷贝。

- p 此时cp除复制源文件的内容外,还将把其修改时间和访问权限也复制到新文件中。

- r 若给出的源文件是一目录文件,此时cp将递归复制该目录下所有的子目录和文件。此时目标文件必须为一个目录名。

- l 不作拷贝,只是链接文件。

需要说明的是,为防止用户在不经意的情况下用cp命令破坏另一个文件,如用户指定的目标文件名已存在,用cp命令拷贝文件后,这个文件就会被新源文件覆盖,因此,建议用户在使用cp命令拷贝文件时,最好使用i选项。

例子:
Cp -i file1 file2 (将文档 file1 复制成 file2 . –i为提示确认。)

cp file1 dir1 将文档 file1 复制到目录 dir1 下,文件名仍为 file1.

cp /tmp/file1 . 将目录 /tmp 下的文档 file1复制到现行目录下,档名仍为 file1.

cp /tmp/file1 file2 将目录 /tmp 下的文档 file1现行目录下,档名为file2

cp -r dir1 dir2 (recursive ) 复制整个目录.若目录 dir2 不存在,则将目录dir1,及其所有文档和子目录,复制到目录 dir2 下,新目录名称为dir1.若目录dir2不存在,则将dir1,及其所有文档和子目录,复制为目录 dir2.

Ⅸ Linux 常用命令(要求全而精)

1、linux分区
--在linux里面所有的设备、任何东西,在linux看来都是文件。
--文件在它看来,有两种形式:
第一种是字符型(键盘输入、打印机);
第二种是二进制型(硬盘、光驱、U盘)
--linux中所有硬件
--手动分区
--A、至少有两个分区
/ 根分区
SWAP 交换分区(物理内存大小的两倍)
--B、个人桌面分区
/
/boot 128MB is enough
/usr
SWAP
/tmp(用于光盘刻录)

2、linux目录说明
--/dev/xxyN
--xx (分区所在设备类型:hd--IDE硬盘 sd--SCSI硬盘)
--y (标明分区所在设备
例如:/dev/hda 第一个IDE硬盘 或 /dev/hdb 第二个IDE硬盘 或 /dev/sdb 第二个SCSI硬盘)
--N (数字代表分区:1-4--主分区或扩展分区;逻辑分区从5开始!
例如:/dev/hda3 第一个IDE硬盘上的第三个主分区或扩展分区
/dev/sdb6 第二个SCSI硬盘上的第二个逻辑分区)

3、linux目录结构
/ 根目录,最高级别
/bin 系统基本命令存放目录(/usr/bin)
/boot linux的内核及引导系统程序文件存放目录(如:vmlinuz、initrd.img)
一般情况下,GRUB或LILO系统引导管理也位于这个目录
/dev 设备文件存储目录,如声卡、光驱...
/ect 存放系统设置文件(如用户账号密码、服务器配置文件等)
/home 普通用户家目录,默认存放目录
/lib 库文件存放目录
/lost+found 在ext2或ext3文件系统中,当系统以外崩溃或机器意外关机,而产生一些文件碎片放在这里。
当系统启动的过程中,fsck工具会检查这里,并修复已经损坏的文件系统。
有事喜用发生问题,有很多的文件被移到这个目录中,可能会用手工的方式来修复,或者移文件到原来的位置上。
/media 即插即用型存储设备的挂载点自动在这个目录下创建。
如USB盘系统自动挂在后,会在这个目录下产生一个目录;
类似cdrom的目录
/mnt 存放挂载存储设备的挂载目录,如cdrom等目录
/opt 表示可选的意思,有些软件包也会被安装在此,也就是自定义软件包,
比如OpenOffice,或者一些我们自己编译的软件包,也可安装此处。
/proc 操作系统运行时,进程(正在运行的程序)信息及内核信息(比如CPU、硬盘分区、内存信息等)存放在此。
/proc目录是伪装的文件系统proc的挂载目录,proc并不是真正的文件系统
/root linux超级权限用户root的家目录
/sbin 大多是涉及系统管理的命令的存放,只有超级权限用户root才可执行命令存放,普通用户无权限执行此目录下的命令
与 /usr/sbin; /usr/X11R6/sbin; usr/local/sbin 目录相似
(sbin,只有root权限才能执行)
/tmp 临时文件目录,有时用户运行程序的时候,会产生临时文件。
/var/tmp目录和此目录相似
/usr 系统存放程序的目录,如命令、帮助文件等。这个目录下有很多的文件和目录。
大部分Linux发行版提供的软件包都安装在此,涉及服务器的配置文件就安装在/ect中。
/usr/share/fonts 字体目录
/usr/share/man 或 /usr/share/doc 帮助目录
/usr/bin 或 /usr/local/bin 或 /usr/X11R6/bin 普通用户可执行文件目录
/usr/sbin 或 /usr/local/sbin 或 /usr/X11R6/sbin 超级权限用户root可执行命令存放目录
/usr/include 程序头文件存放目录
/var (vary)此目录经常变动
/var/log 用来存放系统日志
/var/www 用来定义Apache服务器站点存放
/var/lib 用来存放一些库文件,如MySQL的,以及MySQL数据库的存放地。

4、基本命令
--查看帮助 *** --help *** --?
--查看详细帮助 man ***
--登录 login
--退出窗口 exit
--关机 shutdown
--重启 reboot
--初始化 init (run level -/etc/inittab),0-6看第六部分的g

--进入根目录 cd /
--回上层目录 cd ..
--相对路径 cd dev
--绝对路径 cd /dev
--查用户名 whoami
--查当前目录 pwd
--列出当前目录内容 ls
-l(树详细显示目录内容)
-m(横列显示目录内容,是屏幕长度显示)
-a(列出全部文件,包括隐藏文件)
-S(以文档大小排序)
--创建目录 mkdir dname
--删除目录 rmdir dname
rm -r *** -(递归删除该目录下所有内容,询问每个准备删除的文件)
rm -rf ***-(强制删除该目录下所有内容,不询问)
--创建空白文件 touch ***
(ps:从技术的角度来讲,linux的文件后缀名没有任何意义)
--复制 cp
cp -r **1 **2 (复制1到2中)
--移动 mv
mv -t **1 **2 (把2移动到1中)
--编辑文本 vi [文件名]
--查看文本 cat 由第一行开始显示文本内容
tac 从最后一行显示,可以看出 tac 是 cat 的倒着写
more 一页一页的显示文档内容
less 与 more 类似,可以往前翻页
head 只看头几行
-N(数字,可根据行数显示)
tail 只看后几行
-N(数字,可根据行数显示)
nl 显示的时候,顺序输出行号
od 以二进制位的方式读取档案内容
--查找文本 find [路径][查找类型][搜索文件名]
如查找rc.local find /etc -name *.local
--查找命令信息及其位置 whereis 命令
如 whereis ls
--查看环境变量 echo $SHELL
如 echo $PATH (分大小写:分隔符是:,windows是echo %path%;)
--链接 ln
如 ln joe.txt a (硬链接,如同复制一个新文件,joe.txt删除后,a还存在)
a是链接的名称,a和joe.txt同步,然后a的内容和joe.txt一样
joe.txt改变,a也跟着变
如 ln -s joe.txt b (软链接,如同创建一个快捷方式,joe.txt删除后,b不存在)
--wc 统计指定文本文件的行数、字数、字符数
--grep(很常用) 在指定的文本文件中查找指定的字符串
grep 字符串 文件名
--col 见管道..
--------------------
----信息显示命令----
--------------------
--date 显示和设置日期
--stat 显示指定文件的相关信息
--who、w 显示在线登录用户
--whoami 显示用户自己的身份
--id 显示当前用户的id信息
--hostname 显示主机名称
--uname 显示操作系统信息
--dmesg 显示系统启动信息
-- 显示指定的文件(目录)已使用的磁盘空间
--df 显示文件系统磁盘空间的使用情况
--free 显示当前内存和交换空间的使用情况
--fdisk -l 显示磁盘信息
--locale 显示当前语言环境

5、挂载点(mount 设备目录 挂载目录)
--访问设备 (那设备当成一个文件,和另外一个文件夹进行绑定)
--例如挂载光驱:步骤 [cd /mnt]---[mkdir cdr]---[mount /dev/cdrom /mnt/cdr]---[cd cdr]--OK!直接访问光驱内容
--卸载挂载设备(umount /dev/cdrom)--注意必须先退出挂载目录,否则出现"device is busy"错误.

6、startup-shutdown(linux启动流程)
--A、boot sequence(important) linux启动过程
a. load bios(hardware information)
b. read MBR's config to find out the OS
(MBR--Master Boot Record,硬盘第一个物理扇区,柱面0、磁头0、扇区1,包含主引导程序和硬盘分区表)
c. load the kernel of the OS
(加载为kernel核心的OS)
d. init process starts...
(启动linux第一个进程init)
e. execute /etc/rc.d/sysinit
(执行系统最重要的配置文件,后台启用进程)
(rc.d--run command)
f. start other moles(stc/moles.conf)
(开启各种模块,如内存管理模块、硬盘管理模块)
g. execute the run level scripts
(系统启动是分层次的,根据情况执行,每个层次之间没关系)
0 - 系统停机状态
1 - 单用户工作状态 root
2 - 多用户状态(没有NFS)
3 - 多用户状态(有NFS)
NFS - Network File System 网络文件系统,联网系统
4 - 系统未使用,留给用户
5 - 图形界面
6 - 系统正常关闭并重新启动
如:cd /etc -- 有rc0.d、rc1.d、rc2.d、rc3.d、rc4.d、rc5.d等多个文件夹,保存着各个层次执行的进程文件
h. execute /etc/rc.d/rc.local (重要)
(保存其它进程脚本,如tomcat自动启动,要修改此配置文件)
i. execute /bin/login
(登录界面)
j. shell started...

7、vi 文本编辑器
--两种模式:命令模式 编辑模式
--vi [文件名]
(切换到编辑模式)
a append-光标后添加
i insert-光标前插入
o open-另起一行编辑
esc (切换回命令模式)
:w 存盘
:wq 存盘退出
:q 退出
:q! 不存盘退出
dd 删除其中一行
dw 删除一个单词

(sudo gedit 文本 常用linux下的文本编辑器,比vi好用)

8、用户设置
--切换用户(switch user) su username
小技巧:直接exit切换
--添加用户 useradd username [-g] [组名](分配到某个用户组)
(创建后会自动在/home目录下创建该新用户的文件夹,如/home/username)
--设置密码 passwd username
--cd /etc
--查看用户信息 more password
如新增的用户信息:username:x:500:500::/home/username:/bin/bash
第一个数字,代表用户组,当添加用户没有指定用户组时,系统会创建一个和用户ID一样的组ID;
第二个数字:用户ID号;
用户的目录是/home/username;
用户的SHELL是/bin/bash
(命令--->SHELL[解释命令]--->kenrel内核)
SHELL有多种类型,如csh、bash(常用)、bsh、ksh、sh(最原始)
--添加用户组 groupadd groupname
--查看用户组信息 more group
--删除用户组 groupdel groupname
--修改用户 usermod [-g] [组名] [用户名]
--删除用户 userdel username
然后把/home的文件夹删除了 rm -rf 文件夹

9、权限file privilege
--linux把文件的权限分成四种:r:read w:write x:execute -:none
如:-rw-r--r--
lrwxrwxrwx
drwxr-xr-x
drwxr-xr-x
第一个数字'-'代表文件,其余是文件夹,后9位分为3组,每组有四种权限设置rwx-
第一位表示文件所有者
第二位表示和所有者在同一用户组的用户
第三位表示不在同一用户组的用户权限

--设置权限 (随意应用,灵活组合!)
1、普通用法
--添加权限 [chmod +x 文件]
如:-rw-r--r-- ---> -rwxr-xr-x
--删除权限 [chmod -x 文件]
如:-rwxr-xr-x ---> -rw-r--r--
--给自己添加权限 [chmod ?+x 文件]
如此类推,组--g,其他人--o
如:chmod u+x -rw-r--r-- ---> -rwxr--r--
chmod g+x -rw-r--r-- ---> -rw-r-xr--
chmod o+x -rw-r--r-- ---> -rw-r--r-x

2、专业用法 chmod 755/777
--原理,八进制转二进制
如755,111 101 101, rwx r-x r-x
777,111 111 111, rwx rwx rwx

--修改所有者权限 chown (change owner)
如:chown 原来文件 file1 的所有者是 root,改成joe的
chown joe file1

10、管道(把上一个命令执行的结果交给下一个命令)
--使用方法:
命令1|命令2|命令3......|命令n
--使用举例
--$ls -Rl /etc | more
(如 ls -Rl /etc (在控制台模式下,无法返回前面过去的信息),因此需要管道执行该查询,实现分页的工作, ls -Rl /etc | more)
--$cat /etc/passwd | wc
(显示文件结果,再数数有多少行)
--$cat /etc/passwd | grep lrj
(显示文件结果,再查找包含lrj的行)
--#dmesg | grep eth0
(显示系统启动的信息,再查找包含eth0的行--真正含义,检查网卡执行信息是否正常)
--$man bash | col -b > bash.txt
语法:col [-bfx][-l<缓冲区列数>]
补充说明:在许多UNIX说明文件里,都有RLF控制字符。当我们运用shell特殊字符">"和">>",把说明文件的内容输出成纯文本文件时,控制字符会变成乱码,col指令则能有效滤除这些控制字符。
参数:
-b 过滤掉所有的控制字符,包括RLF和HRLF。
-f 滤除RLF字符,但允许将HRLF字符呈现出来。
-x 以多个空格字符来表示跳格字符。
-l<缓冲区列数> 预设的内存缓冲区有128列,您可以自行指定缓冲区的大小。
--$ls -l | grep "^d"
(用正则表达式筛选出目录列表中 头字母为'd' 的内容--目录)(^是正则表达式开头部分)
--$ls -l * | grep "^-" | wc -l
(列出目录列表中 头字符为'-'的内容--文件,并统计显示的行数wc -l)

11、其他命令
--wall(warning all) 通知所有人
a.命令替换
如 wall `date`、 cd 'pwd'、mkbootdisk $(uname -r)
b.重定向
重定向输出:
如 ls > cmd.txt ,把文件写到cmd.txt,不输出在控制台
ls >> cmd.txt ,把文件追加写到cmd.txt
重定向输入:
如 wall > cmd.txt,把文本内容发给所有人

12、修改系统的默认系统级别
常用3和5
3 - 多用户状态(有NFS)
NFS - Network File System 网络文件系统,联网系统
5 - 图形界面

PS.设置用户权限: sudo chmod 777 目录
4表示读,2表示写,1表示执行.
第一位表示文件所有者,第二位表示和所有者在同一用户组的用户,第三位表示不在同一用户组的用户权限.
755表示文件所有者可读写,执行.
第二位5表示与所有者在同一用户组的可读,可执行,不可写.
第三位5表示其它组可读,可执行,不可写. 转载于Joewalker在本人空间也有详细说明

阅读全文

与linuxcpopen相关的资料

热点内容
python控制键盘右键 浏览:917
php没有libmysqldll 浏览:826
时政新闻app哪个好 浏览:906
手机已加密怎么办 浏览:201
安卓手机截屏怎么传到苹果 浏览:527
京管家app哪里下载 浏览:33
文件夹横向排列的竖向排列 浏览:451
51单片机驱动摄像头模块 浏览:689
政府文件加密没法转换 浏览:373
android判断栈顶 浏览:331
凭证软件源码 浏览:860
androidwebview滚动事件 浏览:11
如何将电脑上的图片压缩成文件包 浏览:899
程序员转金融IT 浏览:837
黑马程序员培训效果如何 浏览:913
本地集成编译 浏览:528
韩国电影哪个app可以看 浏览:703
玖月授权什么app什么梗 浏览:785
怎么使用服务器上的ip地址是什么情况 浏览:752
手机密码加密后怎么解密 浏览:343