shell脚本分别显示家目录下的文件

Linux系统shell显示文件:分别显示家目录下所有文件夹、普通文件、链接文件。

1个回答

文件夹: ls -l|grep ^d
普通文件:ls -l|grep ^-
链接文件:ls -l|grep ^l

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
新编写的shell脚本命令,运行时,显示comamand not found
在ubuntu 15.04 ~/目录已经建立bin文件夹,并把新编写的shell脚本,放在~/bin目录下,使用绝对目录时运行脚本文件,是可以运行的,但是在/usr/include/mysql目录下运行,脚本命令时,显示command not found 通过网上查询,说是未设置环境变量的问题,可是查看环境变量,已经包含~/bin目录,就是不清楚为什么在/usr/include/mysql目录下运行不成功 求各位大神不吝指教!!!
Shell脚本中执行kill之后就结束,不在往下执行nohup命令
编写这个脚本是用来检测开发是否使用FTP上传了新的文件 在定时任务里每分钟执行一次,对比大小来重启Java ```shell #!/bin/bash #判断文件大小-更新文件 触发Java重启 #查看当前文件大小 new_size=$(ls -l /www/test.jar | awk '{print $5}') #查看历史文件大小 look_size=$(cat /www/size) #查看Java进程 java_ps=$(ps -ef|grep java | grep -v 'grep'|awk '{print $2}') #重启Java ReJava(){ echo "[信息]$(date +"%Y年%m月%d日 %T") 文件不相同,正在重启!" >> /data/logs/rejava.log kill $java_ps nohup java -jar /www/test.jar >/www/log.log 2>&1 & ls -l /www/test.jar | awk '{print $5}' > /www/size } #不重启Java NoReJava(){ echo "[信息]$(date +"%Y年%m月%d日 %T") 文件相同,无需重启!" >> /data/logs/rejava.log } #判断文件大小是否发生变化 if [ $look_size != $new_size ] then ReJava else NoReJava fi ``` 已经使用bash -x查看过程,看不出什么问题就莫名其妙结束了 显示Terminated后结束脚本,ReJava函数里的nohup命令不在往下执行
Bourne shell程序设计
实验三 Bourne shell程序设计 一 、实验目的 1、巩固Bourne shell程序设计的学习; 2、掌握Bourne shell程序语句。 二、实验内容及要求 1、使用Bourne shell编写一个shell脚本程序,并调试通过。 2、通过对Bourne Shell的学习和应用,要求学生能够使用Bourne Shell语言解决实际问题,要求学生具有初步的Shell程序设计能力。 3、使用Bourne Shell 编写一段程序脚本。实现:输入1到9范围内任何一个整数,并将该整数与1~9相乘的结果输出到文件中result_multiply中。 4、用Bourne shell编写一段程序脚本,用于比较两个文件的内容,保存为shell_test2,并调试。 要求编写并调试通实验程序脚本shell_test2。 三、实验仪器设备 安装有UNIX操作系统的计算机。 四、实验原理 UNIX系统中为用户提供了shell高级程序设计语言,方便了系统维护和应用开发,也提高了编程效率。通常UNIX系统提供几种不同的shell,但以Bourne shell为最基本的shell,因此熟悉它可以为学习其它shell脚本语言奠定基础。各种shell有所不同,但它们突出特点是:把已有命令进行适当组合,构成新的命令;用户和UNIX系统之间可以通过shell进行交互;灵活利用位置参数传递参数值;结构化的程序模块,提供了顺序流程控制、条件控制、循环控制等;提供通配符、输入/输出重定向、管道等机制;便于用户开发新的命令; 1、利用shell过程把用户编写的可执行程序与UNIX命令结合在一起,当作新的命令使用;提供后台处理方式; 2、利用exec命令实现打开(open)文件,并分配给文件标识符供读文件(read)内容使用,然后关闭文件(close)。同时还需利用位置参数传递参数值。另外还需利用条件控制、循环控制等语句。 本实验要求编写的程序。首先,是利用Bourne shell环境下,分别采用控制结构的测试语句来完成所要求的功能;其次,用Bourne shell提供的各种机制和语句,完成所要求的比较两个文件内容的功能。 实验步骤 (一) 1、登录UNIX系统。 2、创建脚本文件。 3、输入一个整数(1-9)。 4、输入的数据不符合要求,异常退出。 5、实现该整数与1~9所有整数相乘,并将结果输出到文件result_multiply中。 (二) 1、登录UNIX系统。 2、用vi创建文件file1,将其拷贝为file2和file3 ,将文件file3内容进行改动。 3、在shell提示符下输入:vi shell_test2 4、该脚本在执行时需要两个参数,分别是被比较的两个文件名。 5、在vi中用Bourne shell脚本语言编写程序,使其具备如下功能: ⑴ 检查用户执行该脚本时是否正确输入两个参数;按照出现的错误分别显示: ① 在未输入两个参数的情况下显示:“two filename arguments”;异常退出程序; ② 在其中一个参数不是文件名时显示:“filename”;异常退出程序。 ⑵ 分别将两个位置参数赋给两个变量f1和f2,打开并分配给这两个变量所代表的文件以3和4文件标识符。 ⑶ 按文件一内的行循环,分别按行将这两个文件读入两个变量ln1和ln2,并加以比较;并将比较结果分情况显示: ① 如果有不同的行,显示:“different line” 和不同的行内容,退出比较循环; ② 如果文件二先抵达eof,显示:“f1>f2”,退出比较循环; ③ 如果文件一先抵达eof,退出比较循环。 ⑷ 显示:“f2>f1”,否则显示:“the same”。 ⑸ 按文件标识符将两个被比较的文件关闭,正常退出程序。 11、将程序保存为文件shell_test2。 12、在shell提示符下输入:chmod 700 shell_test2 。 13、在shell提示符下输入:输入shell_test2 file1 file2,观察程序执行结果并调试。 14、在shell提示符下输入:输入shell_test2 file2 file3,观察程序执行结果。 15、退出系统。
java 程序调用Unix/Linux 中的Shell,然后shell中含中文名的问题
各路好手,小弟项目中遇到如下问题,急需各位大侠出手相助,现将问题描述如下: <br />小弟的项目是用Java开发的,IDE是 Mac OS 下的 Eclipse(Linux/Unix下也是相同的问题)。程序中需调用系统的 shell 命令,例如: <br /><pre name="code" class="java">String line; String[] cmd = new String[3]; cmd[0] = "/bin/sh"; cmd[1] = "-c"; cmd[2] = "du -sh /Users/测试" Process proc = Runtime.getRuntime.exec(cmd); InputStreamReader is = new InputStreamReader(proc.getInputStream()); BufferedReader br = new BufferedReader (is); while ((line = br.readLine ()) != null) { System.out.println(line); }</pre> <br />du 命令是用来读取文件大小的shell命令,本程序需要读取“/Users/测试”这个文件夹的大小。现在问题来了,源程序没有经过打包,直接在Eclipse中点击Run按钮,这样是可以直接显示正确结果的,如“123M /Users/测试”这种形式,但是打包成jar包时,shell命令就不识别中文名了,也就无法执行du命令。打开终端,在命令行下键入 “du -sh /Users/测试”也是可以显示正确结果。所以小弟想应该是Shell的环境变量设置有问题。请问,应该如何在程序中设置shell的环境变量,确保打包后的程序能正常调用含中文参数的shell命令。 <br />请各路好手出手相助!<br/><strong>问题补充</strong><br/>To zhoun: <br />我在命令行执行echo $LANG结果是zh_CN.UTF-8;所以按照你写的执行了一下,结果报“java.io.IOException: LANG=zh_CN.UTF-8: not found”异常。<br /><strong>问题补充:</strong><br />To Ihavegotyou: <br />多谢你的回答,呵呵。 <br />不过小弟仅仅是拿 du 命令作为一个例子,使用其他Linux/Unix命令的时候,对于中文参数,还是会面临一样的问题的。<br /><strong>问题补充:</strong><br />多谢您的回答。目前问题已解决。我将程序拿出来,在命令行下制定字符集进行编译如: javac -encoding UTF-8 test.java 然后运行的时候也是指定相同字符集 java -Dfile.encoding=UTF-8 ... 这样就能正常运行了。所以问题就是,双击可运行jar包时,调用的字符集和原先编译的字符集不一样。
shell -- mv命令
mv sourece destination 当要移动的文件不存在时,会出现一条错误消息, 如何让这个错误消息不显示. [b]问题补充:[/b] source ./archiveLogCfg.sh echo "Start Move Log files..."; YY=`date '+%Y'`; MM=`date '+%m'`; DD=`date '+%d'`; X=1 while (( X <= $ARCHIVE_DAY_BEFORE )) do let DD=DD-1; if ((DD <= 0 )) then tempDD=`date -d $YY-$MM-0 '+%d'`; let MM=MM-1; let DD=tempDD+DD; fi if (( MM <= 0 )) then tempMM=`date -d $YY-0-$DD '+%m'`; let YY=YY-1; let MM=tempMM+MM; fi moveDate=`date -d $YY-$MM-$DD '+%y.%m.%d'`; mv $LOG_HOME/$SERVER/*$moveDate*.log $ARCHIVE_TO; mv $FFDC_HOME/*$moveDate*.txt $ARCHIVE_TO; let X=X+1; done echo "Move Log files finish..."; 以上是我写的命令, 现在的问题是在执行的时候,如果有文件找不到,会出现错误消息,如何让这个错误消息不出现.麻烦大虾们帮我改改,因为我完全不懂shell的,是临时抱佛脚,现学现卖的.
如何统计文本文件中16进制分隔符的个数
环境:linux centos7 文本文件:txt 16进制分隔符:0x1b 在linux中用vi打开显示^[ 目的:要统计文本文件中第一行中这个16进制分隔符的个数,要用linux命令 或者shell脚本 最好越简洁越好 ![图片说明](https://img-ask.csdn.net/upload/201906/21/1561117190_622453.jpg) 先谢谢大虾们
请问一下java 调用shell上传linux的问题
package com.wfj.cms.util; import java.io.IOException; import java.util.ArrayList; import java.util.Hashtable; import java.util.List; import org.apache.log4j.Logger; import org.apache.oro.text.regex.MalformedPatternException; import com.jcraft.jsch.ChannelShell; import com.jcraft.jsch.JSch; import com.jcraft.jsch.Session; import com.jcraft.jsch.UserInfo; import expect4j.Closure; import expect4j.Expect4j; import expect4j.ExpectState; import expect4j.matches.EofMatch; import expect4j.matches.Match; import expect4j.matches.RegExpMatch; import expect4j.matches.TimeoutMatch; public class Shell { private static Logger log = Logger.getLogger(Shell.class); private Session session; private ChannelShell channel; private static Expect4j expect = null; private static final long defaultTimeOut = 1000; private StringBuffer buffer=new StringBuffer(); public static final int COMMAND_EXECUTION_SUCCESS_OPCODE = -2; public static final String BACKSLASH_R = "\r"; public static final String BACKSLASH_N = "\n"; public static final String COLON_CHAR = ":"; public static String ENTER_CHARACTER = BACKSLASH_R; public static final int SSH_PORT = 22; //正则匹配,用于处理服务器返回的结果 public static String[] linuxPromptRegEx = new String[] { "~]#", "~#", "#", ":~#", "/$", ">" }; public static String[] errorMsg=new String[]{"could not acquire the config lock "}; //ssh服务器的ip地址 private String ip; //ssh服务器的登入端口 private int port; //ssh服务器的登入用户名 private String user; //ssh服务器的登入密码 private String password; public Shell(String ip,int port,String user,String password) { this.ip=ip; this.port=port; this.user=user; this.password=password; expect = getExpect(); } /** * 关闭SSH远程连接 */ public void disconnect(){ if(channel!=null){ channel.disconnect(); } if(session!=null){ session.disconnect(); } } /** * 获取服务器返回的信息 * @return 服务端的执行结果 */ public String getResponse(){ return buffer.toString(); } //获得Expect4j对象,该对用可以往SSH发送命令请求 private Expect4j getExpect() { try { log.debug(String.format("Start logging to %s@%s:%s",user,ip,port)); JSch jsch = new JSch(); session = jsch.getSession(user, ip, port); session.setPassword(password); Hashtable<String, String> config = new Hashtable<String, String>(); config.put("StrictHostKeyChecking", "no"); session.setConfig(config); localUserInfo ui = new localUserInfo(); session.setUserInfo(ui); session.connect(); channel = (ChannelShell) session.openChannel("shell"); Expect4j expect = new Expect4j(channel.getInputStream(), channel .getOutputStream()); channel.connect(); log.debug(String.format("Logging to %s@%s:%s successfully!",user,ip,port)); return expect; } catch (Exception ex) { log.error("Connect to "+ip+":"+port+"failed,please check your username and password!"); ex.printStackTrace(); } return null; } /** * 执行配置命令 * @param commands 要执行的命令,为字符数组 * @return 执行是否成功 */ public boolean executeCommands(String[] commands) { //如果expect返回为0,说明登入没有成功 if(expect==null){ return false; } log.debug("----------Running commands are listed as follows:----------"); for(String command:commands){ log.debug(command); } log.debug("----------End----------"); Closure closure = new Closure() { public void run(ExpectState expectState) throws Exception { buffer.append(expectState.getBuffer());// buffer is string // buffer for appending // output of executed // command expectState.exp_continue(); } }; List<Match> lstPattern = new ArrayList<Match>(); String[] regEx = linuxPromptRegEx; if (regEx != null && regEx.length > 0) { synchronized (regEx) { for (String regexElement : regEx) { try { RegExpMatch mat = new RegExpMatch(regexElement, closure); lstPattern.add(mat); } catch (MalformedPatternException e) { return false; } catch (Exception e) { return false; } } lstPattern.add(new EofMatch(new Closure() { // should cause // entire page to be // collected public void run(ExpectState state) { } })); lstPattern.add(new TimeoutMatch(defaultTimeOut, new Closure() { public void run(ExpectState state) { } })); } } try { boolean isSuccess = true; for (String strCmd : commands){ isSuccess = isSuccess(lstPattern, strCmd); } //防止最后一个命令执行不了 isSuccess = !checkResult(expect.expect(lstPattern)); //找不到错误信息标示成功 String response=buffer.toString().toLowerCase(); for(String msg:errorMsg){ if(response.indexOf(msg)>-1){ return false; } } return isSuccess; } catch (Exception ex) { ex.printStackTrace(); return false; } } //检查执行是否成功 private boolean isSuccess(List<Match> objPattern, String strCommandPattern) { try { int result = expect.expect(objPattern); boolean isFailed = checkResult(result); if (!isFailed) { expect.send(strCommandPattern); expect.send("\r"); return true; } return false; } catch (MalformedPatternException ex) { return false; } catch (Exception ex) { return false; } } //检查执行返回的状态 private boolean checkResult(int intRetVal) { if (intRetVal == COMMAND_EXECUTION_SUCCESS_OPCODE) { return true; } return false; } //登入SSH时的控制信息 //设置不提示输入密码、不显示登入信息等 public static class localUserInfo implements UserInfo { String passwd; public String getPassword() { return passwd; } public boolean promptYesNo(String str) { return true; } public String getPassphrase() { return null; } public boolean promptPassphrase(String message) { return true; } public boolean promptPassword(String message) { return true; } public void showMessage(String message) { } } public static void main(String[] orgs) throws IOException, InterruptedException{ String ip = "10.6.1.64"; int port = 22; String user ="tomcat"; String password = "123456"; String cmd[] = {" cd /usr","ls -ls"}; String command = "/home/tomcat"; Shell ssh = new Shell(ip,port,user,password); ssh.executeCommands(cmd); System.out.println(ssh.getResponse()); ssh.disconnect(); } } 最近要做一个sell上传jar包到linux上的程序, 大致的需求是.. 将本地(部署在linux服务器上的系统)的文件上传到一组linux服务器上,(多台服务器) 服务器文件路径都是一样的。 但是要用java写, 以前没弄过关于java 调用shell的。 就从网上找到以上代码,但是新的问题又来了, 不熟悉sell命令。 只会一点简单的。从一台服务器上发布到多台服务器(一台一台的上传) 求大神指点迷津。 小弟谦虚好学。 QQ599159992
linux自动执行脚本和收集原本打印的结果?
一个很初级的问题... 我对shell script不是很熟悉。正在使用一个别人编写的sh脚本。 bash xx.sh之后 用read 显示有文字,提示输入参数。(可能不止一层输入) 结果会用printf返回 比如 ``` 输入bash xx.sh 输入回车 打印一行字要求输入数字 输入2 输入回车 打印一行字要求输入数字 输入3 输入回车 打印结果 ``` 我现在希望能够定期自动地执行(参数固定的),之后把它原本printf的结果写入一个txt。 cron定期执行shell script我是会, 但是不知道怎么在脚本里调用这种脚本(传入参数和收集结果) 我只知道那种命令行接收参数的... 除了直接改这个ssh文件(把read和printf 改为从命令行接受参数、结果写入txt),有其他的办法吗? 编写一个新脚本:调用这个sh文件、传入参数、收集原本printf——这样可以实现吗?如何实现呢? 谢谢!
请帮我看看这个shell脚本,初学。
每个文本文件是一道知识问答题。 每道知识问答题的格式是固定的,例如: ”两个黄鹂鸣翠柳,一行白鹭上青天”是谁的诗作? 李白 杜甫 白居易 杜牧 杜甫 格式是:第一行是问题,空一行,后面每一行各是一个答案,再空一行,最后一行是正确答案。 三、请编程实现百科知识问答功能,要求如下: 将该题目显示出来,当然正确答案是不显示的,让用户答题。 最后统计用户答题的正确率,给予相应评价。 #!/bin/bash correct=0 i=1 export answer="" function readText(){ cat $1 | while read line do if [ $i -ne 8 ] then echo $line else export answer=$line echo $answer fi i=$(($i+1)) done } readText ./1.txt read -p "输入答案:" input #echo "$input $answer" if [ "$input" == "$answer" ];then correct=$(($correct+1)) fi echo $correct
命令行无法运行jar!!!超集,求各路大神赐教
由于课程需要下载的一个jar文件,windows命令行下运行老是显示如下错误: Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException at sun.awt.shell.win32ShellFolder2.getFileSystemPath..... 作业deadline就要到了,十万火急!!求大神帮忙!!
关于linux下cgi使用expect的问题
我有一个程序 在终端下使用正常 我希望给它做一个html页面 因此html页面需要调用cgi脚本 我的cgi脚本是用shell写的 中间调用了expect的命令 因为我的程序其中一步需要输入密码 但是一直不能实现我的需求 脚本在中间会停住不动。。。(我不知道应该如何形容它) 屏幕显示是这样的 root@nicole-virtual-machine:/usr/local/apache/cgi-bin# ./decrypt Content-type: text/html spawn ./ibe decrypt 410909971@qq.com < 2.txt >3.txt private key password: 2222 (暂停一会 程序自己就跳出来了 ) eofroot@nicole-virtual-machine:/usr/local/apache/cgi-bin# 3.txt文件也没有生成。 下面是我的CGI脚本 恳请大神指导 谢谢! #! /bin/bash echo Content-type: text/html echo "" echo "" eval `/usr/local/apache/cgi-bin/proccgi.sh $*` cd /home/nicole/ibe expect<<! spawn ./ibe decrypt 410909971@qq.com < 2.txt >3.txt expect "private key password:" send "2222\r" expect eof send_user "eof" !
to_char转换日期之后输出多了一个换行,这个有没有有遇见过的?或者是分享一下自己的想法
我在shell脚本中对日期做了to_char处理,处理完之后把结果导入到一个文本文件中,但是在输出文本文件中显示时,日期确莫名其妙被换行了,贴图如下![图片说明](https://img-ask.csdn.net/upload/201607/05/1467713080_107837.png) 输出到文本中的结果 ![图片说明](https://img-ask.csdn.net/upload/201607/05/1467713102_618039.png) 各位遇见过的帮忙解答一下
ubuntu中已经对VIM进行设置,为什么仍然没有语法高亮?
etc/vim中的vimrc中内容如下,重启过后仍然没有语法高亮 ``` " All system-wide defaults are set in $VIMRUNTIME/debian.vim and sourced by " the call to :runtime you can find below. If you wish to change any of those " settings, you should do it in this file (/etc/vim/vimrc), since debian.vim " will be overwritten everytime an upgrade of the vim packages is performed. " It is recommended to make changes after sourcing debian.vim since it alters " the value of the 'compatible' option. " This line should not be removed as it ensures that various options are " properly set to work with the Vim-related packages available in Debian. runtime! debian.vim " Uncomment the next line to make Vim more Vi-compatible " NOTE: debian.vim sets 'nocompatible'. Setting 'compatible' changes numerous " options, so any other options should be set AFTER setting 'compatible'. "set compatible " Vim5 and later versions support syntax highlighting. Uncommenting the next " line enables syntax highlighting by default. if has("syntax") syntax on endif " If using a dark background within the editing area and syntax highlighting " turn on this option as well "set background=dark " Uncomment the following to have Vim jump to the last position when " reopening a file "if has("autocmd") " au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif "endif " Uncomment the following to have Vim load indentation rules and plugins " according to the detected filetype. "if has("autocmd") " filetype plugin indent on "endif " The following are commented out as they cause vim to behave a lot " differently from regular Vi. They are highly recommended though. "set showcmd " Show (partial) command in status line. "set showmatch " Show matching brackets. "set ignorecase " Do case insensitive matching "set smartcase " Do smart case matching "set incsearch " Incremental search "set autowrite " Automatically save before commands like :next and :make "set hidden " Hide buffers when they are abandoned "set mouse=a " Enable mouse usage (all modes) " Source a global configuration file if available if filereadable("/etc/vim/vimrc.local") source /etc/vim/vimrc.local endif set ai " 自动缩进,新行与前面的行保持—致的自动空格 set aw " 自动写,转入shell或件时,当前的缓冲区被写入 set flash " 在出错处闪烁但不呜叫(缺省) set ic " 在查询及模式匹配时忽赂大小写 set nu set number " 屏幕左边显示行号 set showmatch " 显示括号配对,当键入“]”“)”时,高亮度显示匹配的括号 set showmode " 处于文本输入方式时加亮按钮条中的模式指示器 set showcmd " 在状态栏显示目前所执行的完成的指令片段亦会显示出来 colorscheme peachpuff " 设定背景为夜间模式 filetype plugin on " 自动识别文件类型,自n.vim”文件,使用缩进定义文件 set autoindent " 设置自动缩进:即每行;使用 noautoindent 取消设置 set cindent " 以C/C++的模式缩进 set noignorecase " 默认区分大小写 set ruler " 打开状态栏标尺 set scrolloff=5 " 设定光标离窗口上下边界 5 行时窗口自动滚动 set shiftwidth=4 " 设定 << 和 >> 命令移动时的宽度为 4 set softtabstop=4 " 使得按退格键时可以一次4 个时删掉所有剩下的空格) set tabstop=4 " 设定 tab 长度为 4 set wrap " 自动换行显示 syntax enable syntax on " 自动语法 ```
java OCX 调用扫描仪,得不到扫描仪结束消息,造成死循环,IE OCX 扫描正常
IE OCX 调用扫描仪正常。 现在开发了一版 java 使用 OleControlSite调用OCX 扫描的。 代码不是很复杂,但是现在有一个问题。 经常出现假死,监测OCX的源码发现 扫描时 获取系统消息 GetMessage 得不到扫描仪回复的 扫描下一张,或者扫描结束的消息。 造成死循环。 但是一样的代码 在IE OCX控件扫描 就不会出现这个问题。 有大神给分析下原因吗? import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.ole.win32.OLE; import org.eclipse.swt.ole.win32.OleAutomation; import org.eclipse.swt.ole.win32.OleControlSite; import org.eclipse.swt.ole.win32.OleEvent; import org.eclipse.swt.ole.win32.OleFrame; import org.eclipse.swt.ole.win32.OleListener; import org.eclipse.swt.ole.win32.Variant; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.MenuItem; import org.eclipse.swt.widgets.Shell; import com.resoft.scan.constant.ScanConstant; /** * * @author wanglei02 * */ public class ScanDome extends SelectionAdapter implements OleListener { private OleAutomation oleAutomation ; public void initUI(){ final Display display = new Display(); Shell shell = new Shell(display,SWT. APPLICATION_MODAL|SWT.CLOSE); shell.setText("扫描"); // Your code goes here (widget creation, set result, etc). shell.setSize(700, 600); Menu menu = new Menu(shell, SWT.BAR); MenuItem scanItem = new MenuItem(menu,SWT.PUSH); scanItem.setText("扫描"); scanItem.addSelectionListener(this); shell.setMenuBar(menu); OleFrame oleFrame = new OleFrame(shell, SWT.NONE); oleFrame.setSize(700, 500); oleFrame.setVisible(true); OleControlSite clientSite = new OleControlSite(oleFrame, SWT.NONE, ScanConstant.OCX_ID); clientSite.setSize(700, 500); clientSite.setRedraw(true); clientSite.doVerb(OLE.OLEIVERB_SHOW); clientSite.pack(); oleAutomation = new OleAutomation(clientSite); this.ShowUI(false); this.imageScrollactivated(); this.SelectSource(false); this.getIDs("FireScanImage"); shell.setLayout(new FillLayout()); //打开界面 shell.open(); shell.layout(); //开始扫描 while (!shell.isDisposed()) { if (!display.readAndDispatch()) { display.sleep(); } } System.exit(0); } @Override public void widgetSelected(final SelectionEvent e) { this.startScan("8729c703d72b4e9a8e871621a57f2676;1111;1111"); } /** * 多点几次就出现卡死的情况<br> * 看日志 扫描的文件已经写入 文件件<br> * 日志到达 启动扫描仪就卡住了, <br> * 之后应该是结束扫描,但是一直没有返回值。<br> * * 测试要求 安装中软OCX控件,安装虚拟扫描仪<br> * @param args */ public static void main(String[] args){ ScanDome scanDome = new ScanDome(); scanDome.initUI(); } /** * 执行 命令 * @param auto * @param methodName * @param arg * @return */ private Variant execute(OleAutomation auto, String methodName, Object arg[]) { int[] ids = auto.getIDsOfNames(new String[] { methodName }); System.out.print("method:" + methodName + " " + "arg:" + arg + " id:" + ids[0]); Variant rtnv; Variant[] rgvarg = null; if (null == arg) { rtnv = auto.invoke(ids[0]); } else { rgvarg = new Variant[arg.length]; for (int i = 0; i < arg.length; i++) { if (arg[i] instanceof Boolean) { rgvarg[i] = new Variant((Boolean) arg[i]); } else if (arg[i] instanceof Integer) { rgvarg[i] = new Variant((Integer) arg[i]); } else { rgvarg[i] = new Variant((String) arg[i]); } } rtnv = auto.invoke(ids[0], rgvarg); } System.out.println(" rtnv:" + rtnv); return rtnv; } /** * @param 开始扫描 */ public void getIDs(String names) { int[] ids = oleAutomation.getIDsOfNames(new String[] {names}); System.out.println("ids:"+ids); } /** * @param 开始扫描 */ public void startScan(String requestId) { execute(oleAutomation, ScanConstant.START_SCAN, new String[] { requestId+";111;111;" }); } /** * @param 显示扫描仪设置 */ public void ShowUI(boolean isShowUI) { execute(oleAutomation, ScanConstant.SHOW_UI, new Object[] {isShowUI}); } /** * @param 选择扫描源 */ public void SelectSource(boolean isSelectSource) { execute(oleAutomation, ScanConstant.SELECT_SOURCE, new Object[] {isSelectSource}); } /** * @param 激活控件 * @return */ public void imageScrollactivated() { execute(oleAutomation, ScanConstant.IMG_SCROLL_ACTIVATED,null); } @Override public void handleEvent(OleEvent arg0) { System.out.println("arg0:"+arg0); } } ``` ```
winsock 网络编程 ftp服务器设计
课程设计时我选的课题是【FTP服务器设计与实现】,老师非要用系统自带的那个telnet作为客户端测试 就是用这个命令【telnet ip 端口号】,但是在实现get命令时下载的文件不知道保存到那里去了。 对于put命令实在是一点头绪都没有,求大神指点。。 #include <winsock2.h> #include <stdio.h> #pragma comment(lib, "ws2_32.lib") #define CLIENT_COUNT 2 #include <stdlib.h> #include <direct.h> #include <io.h> typedef struct _client_t{ SOCKET c; SOCKADDR_IN c_sa; } client_t; client_t clients[CLIENT_COUNT]; WSADATA wsa_data; SOCKET s; SOCKADDR_IN sa; unsigned short port = 23; int backlog = SOMAXCONN;// fd_set readfds; int client_count = 0; int r = 0; char path[80]="shareFile"; char strObject[100]=""; char pathname[80]=""; char buf[80];//接收发送缓冲区 int nn,bytes; int iSynError=1; int sdirfun(SOCKET newsocket);//打印文件目录 int sgetfun(SOCKET newsocket,char name[80],int bytes);//下载文件 //int sputfun(SOCKET newsocket,pathname);//发送文件 int main(int argc, char *argv[]) { if ( 0!=access("shareFile",0)) _mkdir("shareFile"); int n; int i; printf("server start...\n"); memset(&wsa_data, 0, sizeof(wsa_data));//地质结构清零 WSAStartup(0x202, &wsa_data);//初始化版本号2.2 printf("socket...\n"); s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);//创建套接字 if(INVALID_SOCKET==s) { return -1; } memset(&sa, 0, sizeof(sa));//地址结构清零 sa.sin_family = AF_INET; sa.sin_addr.s_addr = INADDR_ANY; sa.sin_port = htons(port); if(SOCKET_ERROR==bind(s, (SOCKADDR*)&sa, sizeof(sa))) {//绑定 r = -2; goto clean; } if(SOCKET_ERROR==listen(s, backlog)) {//监听 r = -3; goto clean; } while(1) { FD_ZERO(&readfds); FD_SET(s, &readfds); for(i=0;i<client_count;i++) { FD_SET(clients[i].c,&readfds); } n = select(0,&readfds,NULL,NULL,NULL); if(n<0) { printf("select error.\n"); r = -4; goto clean; } else if(n==0) { printf("time out\n"); } else//////此时n表示可以使用的套接字数量 { if(FD_ISSET(s,&readfds)) //表示有客户连接请求到达(接收后并处理命令) { SOCKET c; SOCKADDR_IN c_sa; int c_sa_len = sizeof(c_sa); printf("listen message.\n"); c = accept(s,(struct sockaddr *)&c_sa,&c_sa_len); if(INVALID_SOCKET==c) { printf("accept error.\n"); } else { if(client_count>=CLIENT_COUNT) { closesocket(c); printf("client full.\n"); } else { FD_SET(c, &readfds); clients[client_count].c = c; clients[client_count].c_sa = c_sa; client_count++; printf("%s 端口已连接: %d \n",inet_ntoa(c_sa.sin_addr), ntohs(sa.sin_port)); sprintf(buf," *****欢迎使用本服务器**** \r\n"); //向客户端发送欢迎消息 send(c, buf, strlen(buf), 0); sprintf(buf," dir: 列出远方当前目录\r\n"); //向客户端发送欢迎消息 send(c, buf, strlen(buf), 0); sprintf(buf," get: 取远方的一个文件\r\n"); //向客户端发送欢迎消息 send(c, buf, strlen(buf), 0); sprintf(buf," put: 传给远方一个文件\r\n"); //向客户端发送欢迎消息 send(c, buf, strlen(buf), 0); } } } else //有客户发来数据 { //int bytes; int buf_len = 80; int is_need_close = 0; printf("\nclient message.\n"); for(i=0;i<client_count;i++) { if(FD_ISSET(clients[i].c, &readfds)) { memset(buf,0,buf_len); bytes = recv(clients[i].c, buf, buf_len, 0); if(bytes<0) { printf("recv error: %d.\n", WSAGetLastError()); is_need_close = 1; } else if(bytes==0) { printf("client offline.\n"); is_need_close = 1; } else { if(strncmp(buf,"dir",3)==0) sdirfun(clients[i].c); if (strncmp(buf,"get",3)==0) sgetfun(clients[i].c,buf,bytes); if (strncmp(buf,"put",3)==0) { sprintf(buf,"请输入文件路径:\r\n"); send(clients[i].c,buf,buf_len,0); recv(clients[i].c, pathname, 80, 0); // sputfun(clients[i].c,pathname); } } if(is_need_close) { closesocket(clients[i].c); clients[i] = clients[client_count-1]; clients[client_count-1].c = INVALID_SOCKET; client_count--; } } } } } } clean: printf("server stop...\n"); if(INVALID_SOCKET!=s) { closesocket(s); } for(i=0;i<client_count;i++) { if(clients[i].c!=0&&clients[i].c!=INVALID_SOCKET) { closesocket(clients[i].c); } } WSACleanup(); return 0; } int sdirfun(SOCKET newsocket) { char temp_buffer[80]; FILE *p_FiLeTemp; strObject[0]='\0'; strcat(strObject,"dir "); strcat(strObject,path); strcat(strObject,">tmp.txt"); system(strObject); //system函数执行shell命令 p_FiLeTemp=fopen("tmp.txt","r"); //打开执行结果文件,准备发送到客户端 while (fgets(temp_buffer,80,p_FiLeTemp)!=NULL) //每次读取80字节发送 { sprintf(buf,"%-81s",temp_buffer); // send(newsocket, buf, strlen(buf), 0); } fclose(p_FiLeTemp); //发送完毕,关闭结果临时文件 system("del tmp.txt"); //删除结果临时文件 printf("客户端命令:dir:已执行 ! \n"); r=0; return 0; } /*********************************************************************** 函数名:sgetfun 说明: 用于处理来自客户端的文件下载命令 输入参数: SOCKET h_newsocketet,命令通过此socket接收到,可通过它响应命令。 ***********************************************************************/ int sgetfun(SOCKET newsocket,char name[80],int bytes) { int i=0,k=0; char filename[20],temp_buffer[80]; char *p_FileName=strObject; FILE *fp; for(i=0;i<bytes-3;i++) if(name[i+4]!='\r') filename[i]=name[i+4]; printf("客户端下载文件为:"); puts(filename); strcat(strObject,filename); //打开客户端欲下载的文件 if( (fp=fopen(p_FileName,"r")) == NULL ) { //未成功打开文件 sprintf(buf, "Sorry, cannot open %s. Please try again.\r\n", filename); bytes = send(newsocket, buf, strlen(buf), 0); sprintf(buf, "over\r\n"); bytes = send(newsocket, buf, strlen(buf), 0); return 1; } else { printf("文件正在上传:%s\n\n",filename); sprintf(buf, "send...\r\n"); bytes = send(newsocket, buf, strlen(buf), 0); while (fgets(temp_buffer,80,fp)!=NULL) { //循环读取文件并通过h_newsocketet发送到客户端 sprintf(buf,"%s",temp_buffer); send(newsocket, buf, 80, 0); // printf("."); //文件发送中,每发80个字节在屏幕打一个点号 } fclose(fp); sprintf(buf, "send over\r\n"); bytes = send(newsocket, buf, strlen(buf), 0); } //iSynError=0; printf("客户端命令:get:已执行! \n"); return 0; } /* /******************************************************************** 函数名:sputfun 说明: 用于处理来自客户端的文件上传命令 *******************************************************************//*/ int sputfun(SOCKET newsocket,pathname) { //printf("Equivalent to put. \n"); int i=4,k=0; char filename[20]; // identify the filename from rbuffer after the word "RETR " while (1) { bytes = recv(newsocket,&RecvBuffer[i],1,0); if ((bytes < 0) || (bytes == 0)) break; filename[k]=RecvBuffer[i]; if (RecvBuffer[i] == '\0') { filename[k] = '\0'; break; } if (RecvBuffer[i] != '\r') { i++; k++; } } // end of while strcat(strObject,filename); printf("客户端上传文件:%s\n",strObject); char *p_FileName=strObject; FILE *fpse; if( (fpse=fopen(strObject,"w")) == NULL ) { printf("open errer!\n"); return 1; } else { printf("已接受文件 : %s\n",filename); while(1) { //读取流并显示 int ret; ret = recv(newsocket, RecvBuffer, 80, 0); if (ret == 0) // Graceful close return 0; else if (ret == SOCKET_ERROR) { printf("recv() failed: %d\n", WSAGetLastError()); return 0; } if(strncmp(RecvBuffer,"226 Transfer",strlen("226 Transfer"))==0) { break; } fprintf(fpse,"%s",RecvBuffer); } printf("RBUFFER=%s",RecvBuffer); fclose(fpse); } iSynError=0; printf("客户端命令:put:已执行! \n"); return 0; } */ ``` ```
CentOS sublime text build error
build system 文件内容: { "cmd": ["make", "linux"], "working_dir": "/home/cyb/lua-5.3.4/src", "encoding": "utf-8" } build 错误信息: Running make linux Exception in thread Thread-4: Traceback (most recent call last): File "./python3.3/threading.py", line 901, in _bootstrap_inner File "./python3.3/threading.py", line 858, in run File "/opt/sublime_text/Packages/Default.sublime-package/exec.py", line 152, in read_fileno decoder_cls = codecs.getincrementaldecoder(self.listener.encoding) AttributeError: 'NoneType' object has no attribute 'encoding' 如果我把build system里的命令写错,比如把make写成其他的不存在的命令,在sublime的build result窗口会显示我的命令有错误,但是如果命令对了,成功进入make的环节,就会报错~ code in exec.py ``` import collections import functools import html import os import subprocess import sys import threading import time import codecs import signal import sublime import sublime_plugin class ProcessListener(object): def on_data(self, proc, data): pass def on_finished(self, proc): pass class AsyncProcess(object): """ Encapsulates subprocess.Popen, forwarding stdout to a supplied ProcessListener (on a separate thread) """ def __init__(self, cmd, shell_cmd, env, listener, path="", shell=False): """ "path" and "shell" are options in build systems """ if not shell_cmd and not cmd: raise ValueError("shell_cmd or cmd is required") if shell_cmd and not isinstance(shell_cmd, str): raise ValueError("shell_cmd must be a string") self.listener = listener self.killed = False self.start_time = time.time() # Hide the console window on Windows startupinfo = None if os.name == "nt": startupinfo = subprocess.STARTUPINFO() startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW # Set temporary PATH to locate executable in cmd if path: old_path = os.environ["PATH"] # The user decides in the build system whether he wants to append $PATH # or tuck it at the front: "$PATH;C:\\new\\path", "C:\\new\\path;$PATH" os.environ["PATH"] = os.path.expandvars(path) proc_env = os.environ.copy() proc_env.update(env) for k, v in proc_env.items(): proc_env[k] = os.path.expandvars(v) if sys.platform == "win32": preexec_fn = None else: preexec_fn = os.setsid if shell_cmd and sys.platform == "win32": # Use shell=True on Windows, so shell_cmd is passed through with the correct escaping self.proc = subprocess.Popen( shell_cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE, startupinfo=startupinfo, env=proc_env, shell=True) elif shell_cmd and sys.platform == "darwin": # Use a login shell on OSX, otherwise the users expected env vars won't be setup self.proc = subprocess.Popen( ["/usr/bin/env", "bash", "-l", "-c", shell_cmd], stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE, startupinfo=startupinfo, env=proc_env, preexec_fn=preexec_fn, shell=False) elif shell_cmd and sys.platform == "linux": # Explicitly use /bin/bash on Linux, to keep Linux and OSX as # similar as possible. A login shell is explicitly not used for # linux, as it's not required self.proc = subprocess.Popen( ["/usr/bin/env", "bash", "-c", shell_cmd], stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE, startupinfo=startupinfo, env=proc_env, preexec_fn=preexec_fn, shell=False) else: # Old style build system, just do what it asks self.proc = subprocess.Popen( cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE, startupinfo=startupinfo, env=proc_env, preexec_fn=preexec_fn, shell=shell) if path: os.environ["PATH"] = old_path if self.proc.stdout: threading.Thread( target=self.read_fileno, args=(self.proc.stdout.fileno(), True) ).start() if self.proc.stderr: threading.Thread( target=self.read_fileno, args=(self.proc.stderr.fileno(), False) ).start() def kill(self): if not self.killed: self.killed = True if sys.platform == "win32": # terminate would not kill process opened by the shell cmd.exe, # it will only kill cmd.exe leaving the child running startupinfo = subprocess.STARTUPINFO() startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW subprocess.Popen( "taskkill /PID %d /T /F" % self.proc.pid, startupinfo=startupinfo) else: os.killpg(self.proc.pid, signal.SIGTERM) self.proc.terminate() self.listener = None def poll(self): return self.proc.poll() is None def exit_code(self): return self.proc.poll() def read_fileno(self, fileno, execute_finished): decoder_cls = codecs.getincrementaldecoder(self.listener.encoding) decoder = decoder_cls('replace') while True: data = decoder.decode(os.read(fileno, 2**16)) if len(data) > 0: if self.listener: self.listener.on_data(self, data) else: try: os.close(fileno) except OSError: pass if execute_finished and self.listener: self.listener.on_finished(self) break class ExecCommand(sublime_plugin.WindowCommand, ProcessListener): BLOCK_SIZE = 2**14 text_queue = collections.deque() text_queue_proc = None text_queue_lock = threading.Lock() proc = None errs_by_file = {} phantom_sets_by_buffer = {} show_errors_inline = True def run( self, cmd=None, shell_cmd=None, file_regex="", line_regex="", working_dir="", encoding="utf-8", env={}, quiet=False, kill=False, update_phantoms_only=False, hide_phantoms_only=False, word_wrap=True, syntax="Packages/Text/Plain text.tmLanguage", # Catches "path" and "shell" **kwargs): if update_phantoms_only: if self.show_errors_inline: self.update_phantoms() return if hide_phantoms_only: self.hide_phantoms() return # clear the text_queue with self.text_queue_lock: self.text_queue.clear() self.text_queue_proc = None if kill: if self.proc: self.proc.kill() self.proc = None self.append_string(None, "[Cancelled]") return if not hasattr(self, 'output_view'): # Try not to call get_output_panel until the regexes are assigned self.output_view = self.window.create_output_panel("exec") # Default the to the current files directory if no working directory was given if working_dir == "" and self.window.active_view() and self.window.active_view().file_name(): working_dir = os.path.dirname(self.window.active_view().file_name()) self.output_view.settings().set("result_file_regex", file_regex) self.output_view.settings().set("result_line_regex", line_regex) self.output_view.settings().set("result_base_dir", working_dir) self.output_view.settings().set("word_wrap", word_wrap) self.output_view.settings().set("line_numbers", False) self.output_view.settings().set("gutter", False) self.output_view.settings().set("scroll_past_end", False) self.output_view.assign_syntax(syntax) # Call create_output_panel a second time after assigning the above # settings, so that it'll be picked up as a result buffer self.window.create_output_panel("exec") self.encoding = encoding self.quiet = quiet self.proc = None if not self.quiet: if shell_cmd: print("Running " + shell_cmd) elif cmd: cmd_string = cmd if not isinstance(cmd, str): cmd_string = " ".join(cmd) print("Running " + cmd_string) sublime.status_message("Building") show_panel_on_build = sublime.load_settings("Preferences.sublime-settings").get("show_panel_on_build", True) if show_panel_on_build: self.window.run_command("show_panel", {"panel": "output.exec"}) self.hide_phantoms() self.show_errors_inline = sublime.load_settings("Preferences.sublime-settings").get("show_errors_inline", True) merged_env = env.copy() if self.window.active_view(): user_env = self.window.active_view().settings().get('build_env') if user_env: merged_env.update(user_env) # Change to the working dir, rather than spawning the process with it, # so that emitted working dir relative path names make sense if working_dir != "": os.chdir(working_dir) self.debug_text = "" if shell_cmd: self.debug_text += "[shell_cmd: " + shell_cmd + "]\n" else: self.debug_text += "[cmd: " + str(cmd) + "]\n" self.debug_text += "[dir: " + str(os.getcwd()) + "]\n" if "PATH" in merged_env: self.debug_text += "[path: " + str(merged_env["PATH"]) + "]" else: self.debug_text += "[path: " + str(os.environ["PATH"]) + "]" try: # Forward kwargs to AsyncProcess self.proc = AsyncProcess(cmd, shell_cmd, merged_env, self, **kwargs) with self.text_queue_lock: self.text_queue_proc = self.proc except Exception as e: self.append_string(None, str(e) + "\n") self.append_string(None, self.debug_text + "\n") if not self.quiet: self.append_string(None, "[Finished]") def is_enabled(self, kill=False, **kwargs): if kill: return (self.proc is not None) and self.proc.poll() else: return True def append_string(self, proc, str): was_empty = False with self.text_queue_lock: if proc != self.text_queue_proc and proc: # a second call to exec has been made before the first one # finished, ignore it instead of intermingling the output. proc.kill() return if len(self.text_queue) == 0: was_empty = True self.text_queue.append("") available = self.BLOCK_SIZE - len(self.text_queue[-1]) if len(str) < available: cur = self.text_queue.pop() self.text_queue.append(cur + str) else: self.text_queue.append(str) if was_empty: sublime.set_timeout(self.service_text_queue, 0) def service_text_queue(self): is_empty = False with self.text_queue_lock: if len(self.text_queue) == 0: # this can happen if a new build was started, which will clear # the text_queue return characters = self.text_queue.popleft() is_empty = (len(self.text_queue) == 0) self.output_view.run_command( 'append', {'characters': characters, 'force': True, 'scroll_to_end': True}) if self.show_errors_inline and characters.find('\n') >= 0: errs = self.output_view.find_all_results_with_text() errs_by_file = {} for file, line, column, text in errs: if file not in errs_by_file: errs_by_file[file] = [] errs_by_file[file].append((line, column, text)) self.errs_by_file = errs_by_file self.update_phantoms() if not is_empty: sublime.set_timeout(self.service_text_queue, 1) def finish(self, proc): if not self.quiet: elapsed = time.time() - proc.start_time exit_code = proc.exit_code() if exit_code == 0 or exit_code is None: self.append_string(proc, "[Finished in %.1fs]" % elapsed) else: self.append_string(proc, "[Finished in %.1fs with exit code %d]\n" % (elapsed, exit_code)) self.append_string(proc, self.debug_text) if proc != self.proc: return errs = self.output_view.find_all_results() if len(errs) == 0: sublime.status_message("Build finished") else: sublime.status_message("Build finished with %d errors" % len(errs)) def on_data(self, proc, data): # Normalize newlines, Sublime Text always uses a single \n separator # in memory. data = data.replace('\r\n', '\n').replace('\r', '\n') self.append_string(proc, data) def on_finished(self, proc): sublime.set_timeout(functools.partial(self.finish, proc), 0) def update_phantoms(self): stylesheet = ''' <style> div.error-arrow { border-top: 0.4rem solid transparent; border-left: 0.5rem solid color(var(--redish) blend(var(--background) 30%)); width: 0; height: 0; } div.error { padding: 0.4rem 0 0.4rem 0.7rem; margin: 0 0 0.2rem; border-radius: 0 0.2rem 0.2rem 0.2rem; } div.error span.message { padding-right: 0.7rem; } div.error a { text-decoration: inherit; padding: 0.35rem 0.7rem 0.45rem 0.8rem; position: relative; bottom: 0.05rem; border-radius: 0 0.2rem 0.2rem 0; font-weight: bold; } html.dark div.error a { background-color: #00000018; } html.light div.error a { background-color: #ffffff18; } </style> ''' for file, errs in self.errs_by_file.items(): view = self.window.find_open_file(file) if view: buffer_id = view.buffer_id() if buffer_id not in self.phantom_sets_by_buffer: phantom_set = sublime.PhantomSet(view, "exec") self.phantom_sets_by_buffer[buffer_id] = phantom_set else: phantom_set = self.phantom_sets_by_buffer[buffer_id] phantoms = [] for line, column, text in errs: pt = view.text_point(line - 1, column - 1) phantoms.append(sublime.Phantom( sublime.Region(pt, view.line(pt).b), ('<body id=inline-error>' + stylesheet + '<div class="error-arrow"></div><div class="error">' + '<span class="message">' + html.escape(text, quote=False) + '</span>' + '<a href=hide>' + chr(0x00D7) + '</a></div>' + '</body>'), sublime.LAYOUT_BELOW, on_navigate=self.on_phantom_navigate)) phantom_set.update(phantoms) def hide_phantoms(self): for file, errs in self.errs_by_file.items(): view = self.window.find_open_file(file) if view: view.erase_phantoms("exec") self.errs_by_file = {} self.phantom_sets_by_buffer = {} self.show_errors_inline = False def on_phantom_navigate(self, url): self.hide_phantoms() class ExecEventListener(sublime_plugin.EventListener): def on_load(self, view): w = view.window() if w is not None: w.run_command('exec', {'update_phantoms_only': True}) ```
mfc通过ado连接access 老是无效指针,求高手指点
// Snake.cpp : 定义应用程序的类行为。 // #include "stdafx.h" #include "afxwinappex.h" #include "afxdialogex.h" #include "Snake.h" #include "MainFrm.h" #include "winsock2.h" #include "SnakeDoc.h" #include "SnakeView.h" #ifdef _DEBUG #define new DEBUG_NEW #endif // CSnakeApp BEGIN_MESSAGE_MAP(CSnakeApp, CWinAppEx) ON_COMMAND(ID_APP_ABOUT, &CSnakeApp::OnAppAbout) // 基于文件的标准文档命令 ON_COMMAND(ID_FILE_NEW, &CWinAppEx::OnFileNew) ON_COMMAND(ID_FILE_OPEN, &CWinAppEx::OnFileOpen) END_MESSAGE_MAP() // CSnakeApp 构造 CSnakeApp::CSnakeApp() { m_bHiColorIcons = TRUE; // 支持重新启动管理器 m_dwRestartManagerSupportFlags = AFX_RESTART_MANAGER_SUPPORT_ALL_ASPECTS; #ifdef _MANAGED // 如果应用程序是利用公共语言运行时支持(/clr)构建的,则: // 1) 必须有此附加设置,“重新启动管理器”支持才能正常工作。 // 2) 在您的项目中,您必须按照生成顺序向 System.Windows.Forms 添加引用。 System::Windows::Forms::Application::SetUnhandledExceptionMode(System::Windows::Forms::UnhandledExceptionMode::ThrowException); #endif // TODO: 将以下应用程序 ID 字符串替换为唯一的 ID 字符串;建议的字符串格式 //为 CompanyName.ProductName.SubProduct.VersionInformation SetAppID(_T("Snake.AppID.NoVersion")); // TODO: 在此处添加构造代码, // 将所有重要的初始化放置在 InitInstance 中 } // 唯一的一个 CSnakeApp 对象 CSnakeApp theApp; // CSnakeApp 初始化 BOOL CSnakeApp::InitInstance() { // 如果一个运行在 Windows XP 上的应用程序清单指定要 // 使用 ComCtl32.dll 版本 6 或更高版本来启用可视化方式, //则需要 InitCommonControlsEx()。否则,将无法创建窗口。 INITCOMMONCONTROLSEX InitCtrls; InitCtrls.dwSize = sizeof(InitCtrls); // 将它设置为包括所有要在应用程序中使用的 // 公共控件类。 InitCtrls.dwICC = ICC_WIN95_CLASSES; InitCommonControlsEx(&InitCtrls); CWinAppEx::InitInstance(); AfxEnableControlContainer(); AfxOleInit(); m_pConnection.CreateInstance(__uuidof(Connection)); // 在ADO操作中建议语句中要常用try...catch()来捕获错误信息, // 因为它有时会经常出现一些想不到的错误。 try { // 打开本地Access库Demo.mdb m_pConnection->Open("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=test.accdb", "", "", adModeUnknown); } catch (_com_error& e) { //调用在CAdoRWAccessDlg中打印错误信息的静态函数 //CAboutDlg::dump_com_error(e); return FALSE; } // 初始化 OLE 库 /*if (!AfxOleInit()) { AfxMessageBox(IDP_OLE_INIT_FAILED); return FALSE; }*/ AfxEnableControlContainer(); EnableTaskbarInteraction(FALSE); // 使用 RichEdit 控件需要 AfxInitRichEdit2() // AfxInitRichEdit2(); // 标准初始化 // 如果未使用这些功能并希望减小 // 最终可执行文件的大小,则应移除下列 // 不需要的特定初始化例程 // 更改用于存储设置的注册表项 // TODO: 应适当修改该字符串, SetRegistryKey(_T("应用程序向导生成的本地应用程序")); LoadStdProfileSettings(4); // 加载标准 INI 文件选项(包括 MRU) InitContextMenuManager(); InitKeyboardManager(); InitTooltipManager(); CMFCToolTipInfo ttParams; ttParams.m_bVislManagerTheme = TRUE; theApp.GetTooltipManager()->SetTooltipParams(AFX_TOOLTIP_TYPE_ALL, RUNTIME_CLASS(CMFCToolTipCtrl), &ttParams); // 注册应用程序的文档模板。文档模板 // 将用作文档、框架窗口和视图之间的连接 CSingleDocTemplate* pDocTemplate; pDocTemplate = new CSingleDocTemplate( IDR_MAINFRAME, RUNTIME_CLASS(CSnakeDoc), RUNTIME_CLASS(CMainFrame), // 主 SDI 框架窗口 RUNTIME_CLASS(CSnakeView)); if (!pDocTemplate) return FALSE; AddDocTemplate(pDocTemplate); // 分析标准 shell 命令、DDE、打开文件操作的命令行 CCommandLineInfo cmdInfo; ParseCommandLine(cmdInfo); // 调度在命令行中指定的命令。如果 // 用 /RegServer、/Register、/Unregserver 或 /Unregister 启动应用程序,则返回 FALSE。 if (!ProcessShellCommand(cmdInfo)) return FALSE; // 唯一的一个窗口已初始化,因此显示它并对其进行更新 m_pMainWnd->MoveWindow(0,0,645,645,1); m_pMainWnd->CenterWindow(); m_pMainWnd->ShowWindow(SW_SHOW); m_pMainWnd->UpdateWindow(); // 仅当具有后缀时才调用 DragAcceptFiles // 在 SDI 应用程序中,这应在 ProcessShellCommand 之后发生 return TRUE; } int CSnakeApp::ExitInstance() { //TODO: 处理可能已添加的附加资源 AfxOleTerm(FALSE); return CWinAppEx::ExitInstance(); } // CSnakeApp 消息处理程序 // 用于应用程序“关于”菜单项的 CAboutDlg 对话框 class CAboutDlg : public CDialogEx { public: CAboutDlg(); // 对话框数据 enum { IDD = IDD_ABOUTBOX }; public: void dump_com_error(_com_error &e); _RecordsetPtr m_pRecordset; //_RecordsetPtr m_pRecordset1; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 // 实现 protected: DECLARE_MESSAGE_MAP() public: afx_msg void OnBnClickedButton1(); CListBox m_AccessList; }; CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD) { } void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); DDX_Control(pDX, IDC_LIST1, m_AccessList); } BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() //}}AFX_MSG_MAP ON_BN_CLICKED(IDC_BUTTON1, &CAboutDlg::OnBnClickedButton1) END_MESSAGE_MAP() // 用于运行对话框的应用程序命令 void CSnakeApp::OnAppAbout() { CAboutDlg aboutDlg; aboutDlg.DoModal(); } void CAboutDlg::dump_com_error(_com_error &e) { CString ErrorStr; _bstr_t bstrSource(e.Source()); _bstr_t bstrDescription(e.Description()); ErrorStr.Format(L"\n\tADO Error\n\tCode = %08lx\n\tCode meaning = %s\n\tSource = %s\n\tDescription = %s\n\n", e.Error(), e.ErrorMessage(), (LPCTSTR)bstrSource, (LPCTSTR)bstrDescription); //在调试窗口中打印错误信息,在Release版中可用DBGView查看错误信息 ::OutputDebugString((LPCTSTR)ErrorStr); #ifdef _DEBUG AfxMessageBox(ErrorStr, MB_OK | MB_ICONERROR); #endif } void CAboutDlg::OnBnClickedButton1() { _variant_t var; CString strName, strAge; m_AccessList.ResetContent(); strName = strAge = ""; try { if (!m_pRecordset->BOF) m_pRecordset->MoveFirst(); else { AfxMessageBox(L"表内数据为空"); return; } while (!m_pRecordset->adoEOF) { var = m_pRecordset->GetCollect("time"); if (var.vt != VT_NULL) strName = (LPCSTR)_bstr_t(var); var = m_pRecordset->GetCollect("score"); if (var.vt != VT_NULL) strAge = (LPCSTR)_bstr_t(var); m_AccessList.AddString(strName + " --> " + strAge); m_pRecordset->MoveNext(); } m_AccessList.SetCurSel(0); } catch (_com_error& e) { dump_com_error(e); } } // CSnakeApp 自定义加载/保存方法 void CSnakeApp::PreLoadState() { BOOL bNameValid; CString strName; bNameValid = strName.LoadString(IDS_EDIT_MENU); ASSERT(bNameValid); GetContextMenuManager()->AddMenu(strName, IDR_POPUP_EDIT); } void CSnakeApp::LoadCustomState() { } void CSnakeApp::SaveCustomState() { } // CSnakeApp 消息处理程序
新手MFC求教,我用MFC做了一个用HOOK的电脑用录制回放器但是出完错后运行法相用不了。
能帮我看看哪有问题吗 // MFCApplication2Dlg.cpp : 实现文件 // #include "stdafx.h" #include "MFCApplication2.h" #include "MFCApplication2Dlg.h" #include "afxdialogex.h" #ifdef _DEBUG #define new DEBUG_NEW #endif // 用于应用程序“关于”菜单项的 CAboutDlg 对话框 HHOOK hHook; CTypedPtrList<CPtrList,EVENTMSG*> EventMsgList; class CAboutDlg : public CDialogEx { public: CAboutDlg(); // 对话框数据 enum { IDD = IDD_ABOUTBOX }; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 // 实现 protected: DECLARE_MESSAGE_MAP() }; CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD) { } void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx) END_MESSAGE_MAP() // CMFCApplication2Dlg 对话框 CMFCApplication2Dlg::CMFCApplication2Dlg(CWnd* pParent /*=NULL*/) : CDialogEx(CMFCApplication2Dlg::IDD, pParent) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void CMFCApplication2Dlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CMFCApplication2Dlg, CDialogEx) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDOK, &CMFCApplication2Dlg::OnBnClickedOk) ON_BN_CLICKED(IDC_BUTTON3, &CMFCApplication2Dlg::OnBnClickedButton3) ON_BN_CLICKED(IDC_BUTTON2, &CMFCApplication2Dlg::OnBnClickedButton2) ON_BN_CLICKED(IDC_BUTTON1, &CMFCApplication2Dlg::OnBnClickedButton1) END_MESSAGE_MAP() // CMFCApplication2Dlg 消息处理程序 BOOL CMFCApplication2Dlg::OnInitDialog() { CDialogEx::OnInitDialog(); // 将“关于...”菜单项添加到系统菜单中。 // IDM_ABOUTBOX 必须在系统命令范围内。 ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { BOOL bNameValid; CString strAboutMenu; bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX); ASSERT(bNameValid); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动 // 执行此操作 SetIcon(m_hIcon, TRUE); // 设置大图标 SetIcon(m_hIcon, FALSE); // 设置小图标 // TODO: 在此添加额外的初始化代码 return TRUE; // 除非将焦点设置到控件,否则返回 TRUE } void CMFCApplication2Dlg::OnSysCommand(UINT nID, LPARAM lParam) { if ((nID & 0xFFF0) == IDM_ABOUTBOX) { CAboutDlg dlgAbout; dlgAbout.DoModal(); } else { CDialogEx::OnSysCommand(nID, lParam); } } // 如果向对话框添加最小化按钮,则需要下面的代码 // 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序, // 这将由框架自动完成。 void CMFCApplication2Dlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // 用于绘制的设备上下文 SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0); // 使图标在工作区矩形中居中 int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; // 绘制图标 dc.DrawIcon(x, y, m_hIcon); } else { CDialogEx::OnPaint(); } } //当用户拖动最小化窗口时系统调用此函数取得光标 //显示。 HCURSOR CMFCApplication2Dlg::OnQueryDragIcon() { return static_cast<HCURSOR>(m_hIcon); } void CMFCApplication2Dlg::OnBnClickedOk() { // TODO: 在此添加控件通知处理程序代码 CDialogEx::OnOK(); } void CMFCApplication2Dlg::OnBnClickedButton3() { hHook =SetWindowsHookEx( WH_JOURNALRECORD, (HOOKPROC)JournalRecordProc, AfxGetApp()->m_hInstance, 0 ); // TODO: 在此添加控件通知处理程序代码 } void CMFCApplication2Dlg::OnBnClickedButton2() { UnhookWindowsHookEx(hHook); // TODO: 在此添加控件通知处理程序代码 } void CMFCApplication2Dlg::OnBnClickedButton1() { hHook=SetWindowsHookEx( WH_JOURNALPLAYBACK, (HOOKPROC)JounralPlaybackProc, AfxGetApp()->m_hInstance, 0 ); // TODO: 在此添加控件通知处理程序代码 } //LRESULT CMFCApplication2Dlg::JournalRecordPro(void) //{ // return LRESULT CALLBACK(); //} LRESULT CALLBACK CMFCApplication2Dlg::JournalRecordProc(int nCode,WPARAM wparam,LPARAM lparam) { if (nCode<0) return CallNextHookEx(NULL,nCode,wparam,lparam); EVENTMSG*pmsg=(EVENTMSG*)lparam; switch(nCode) { case HC_ACTION: {EVENTMSG * pEventMsg =new EVENTMSG; memcpy(pEventMsg,pmsg,sizeof(EVENTMSG)); EventMsgList.AddTail(pEventMsg);} break; case HC_SYSMODALOFF: break; case HC_SYSMODALON: break; } } LRESULT CALLBACK CMFCApplication2Dlg::JounralPlaybackProc(int nCode,WPARAM wparam,LPARAM lparam) { static unsigned i=0; static BOOL bFlag =TRUE; EVENTMSG*pMsg; POSITION pos; DWORD PreTime,NowTime; switch (nCode) { case HC_SKIP: bFlag =TRUE; i++; break; case HC_GETNEXT: if(i>=EventMsgList.GetCount()-2) { i=0; UnhookWindowsHookEx(hHook); AfxMessageBox(_T("回放完毕!")); } pos=EventMsgList.FindIndex(i); pMsg=EventMsgList.GetAt(pos); memcpy((LPEVENTMSG)lparam,pMsg,sizeof(EVENTMSG)); if((i)!=0 && bFlag==TRUE) { bFlag=FALSE; NowTime=pMsg->time; pos=EventMsgList.FindIndex(i-1); pMsg=EventMsgList.GetAt(pos); PreTime=pMsg->time; return NowTime-PreTime; } else return 0; break; default: return CallNextHookEx(NULL,nCode,wparam,lparam); } return 0; } 调试后框里出来的东西: “MFCApplication2.exe”(Win32): 已加载“E:\PJB\MFCApplication2\Debug\MFCApplication2.exe”。已加载符号。 “MFCApplication2.exe”(Win32): 已加载“C:\Windows\SysWOW64\ntdll.dll”。已加载符号。 “MFCApplication2.exe”(Win32): 已加载“C:\Windows\SysWOW64\kernel32.dll”。已加载符号。 “MFCApplication2.exe”(Win32): 已加载“C:\Windows\SysWOW64\KernelBase.dll”。已加载符号。 “MFCApplication2.exe”(Win32): 已加载“C:\Windows\SysWOW64\mfc110ud.dll”。已加载符号。 “MFCApplication2.exe”(Win32): 已加载“C:\Windows\SysWOW64\msvcr110d.dll”。已加载符号。 “MFCApplication2.exe”(Win32): 已加载“C:\Windows\SysWOW64\user32.dll”。已加载符号。 “MFCApplication2.exe”(Win32): 已加载“C:\Windows\WinSxS\x86_microsoft.windows.common-controls_6595b64144ccf1df_6.0.9600.17784_none_a9f497a901334c74\comctl32.dll”。已加载符号。 “MFCApplication2.exe”(Win32): 已加载“C:\Windows\SysWOW64\oleaut32.dll”。已加载符号。 “MFCApplication2.exe”(Win32): 已加载“C:\Windows\SysWOW64\gdi32.dll”。已加载符号。 “MFCApplication2.exe”(Win32): 已加载“C:\Windows\SysWOW64\msvcrt.dll”。已加载符号。 “MFCApplication2.exe”(Win32): 已加载“C:\Windows\SysWOW64\combase.dll”。已加载符号。 “MFCApplication2.exe”(Win32): 已加载“C:\Windows\SysWOW64\rpcrt4.dll”。已加载符号。 “MFCApplication2.exe”(Win32): 已加载“C:\Windows\SysWOW64\sspicli.dll”。已加载符号。 “MFCApplication2.exe”(Win32): 已加载“C:\Windows\SysWOW64\cryptbase.dll”。已加载符号。 “MFCApplication2.exe”(Win32): 已加载“C:\Windows\SysWOW64\sechost.dll”。已加载符号。 “MFCApplication2.exe”(Win32): 已加载“C:\Windows\SysWOW64\bcryptprimitives.dll”。已加载符号。 “MFCApplication2.exe”(Win32): 已加载“C:\Windows\SysWOW64\imm32.dll”。已加载符号。 “MFCApplication2.exe”(Win32): 已加载“C:\Windows\SysWOW64\msctf.dll”。已加载符号。 “MFCApplication2.exe”(Win32): 已加载“C:\Windows\SysWOW64\advapi32.dll”。已加载符号。 “MFCApplication2.exe”(Win32): 已加载“C:\Windows\SysWOW64\shlwapi.dll”。已加载符号。 “MFCApplication2.exe”(Win32): 已加载“C:\Windows\SysWOW64\ole32.dll”。已加载符号。 “MFCApplication2.exe”(Win32): 已加载“C:\Windows\SysWOW64\shell32.dll”。已加载符号。 “MFCApplication2.exe”(Win32): 已加载“C:\Windows\SysWOW64\uxtheme.dll”。已加载符号。 “MFCApplication2.exe”(Win32): 已加载“C:\Windows\SysWOW64\dwmapi.dll”。已加载符号。 “MFCApplication2.exe”(Win32): 已加载“C:\Windows\SysWOW64\kernel.appcore.dll”。已加载符号。 “MFCApplication2.exe”(Win32): 已加载“C:\Windows\SysWOW64\SHCore.dll”。已加载符号。 “MFCApplication2.exe”(Win32): 已加载“C:\Users\Saber\AppData\Roaming\TaobaoProtect\TaobaoProtectSE.dll”。无法查找或打开 PDB 文件。 “MFCApplication2.exe”(Win32): 已加载“C:\Windows\SysWOW64\psapi.dll”。已加载符号。 “MFCApplication2.exe”(Win32): 已加载“C:\Windows\SysWOW64\crypt32.dll”。已加载符号。 “MFCApplication2.exe”(Win32): 已加载“C:\Windows\SysWOW64\version.dll”。已加载符号。 “MFCApplication2.exe”(Win32): 已加载“C:\Windows\SysWOW64\sfc.dll”。已加载符号。 “MFCApplication2.exe”(Win32): 已加载“C:\Windows\SysWOW64\msasn1.dll”。已加载符号。 “MFCApplication2.exe”(Win32): 已加载“C:\Windows\SysWOW64\sfc_os.dll”。已加载符号。 程序“[10192] MFCApplication2.exe”已退出,返回值为 2 (0x2)。
爬虫福利二 之 妹子图网MM批量下载
爬虫福利一:27报网MM批量下载    点击 看了本文,相信大家对爬虫一定会产生强烈的兴趣,激励自己去学习爬虫,在这里提前祝:大家学有所成! 目标网站:妹子图网 环境:Python3.x 相关第三方模块:requests、beautifulsoup4 Re:各位在测试时只需要将代码里的变量 path 指定为你当前系统要保存的路径,使用 python xxx.py 或IDE运行即可。
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 顺便拉下票,我在参加csdn博客之星竞选,欢迎投票支持,每个QQ或者微信每天都可以投5票,扫二维码即可,http://m234140.nofollow.ax.
比特币原理详解
一、什么是比特币 比特币是一种电子货币,是一种基于密码学的货币,在2008年11月1日由中本聪发表比特币白皮书,文中提出了一种去中心化的电子记账系统,我们平时的电子现金是银行来记账,因为银行的背后是国家信用。去中心化电子记账系统是参与者共同记账。比特币可以防止主权危机、信用风险。其好处不多做赘述,这一层面介绍的文章很多,本文主要从更深层的技术原理角度进行介绍。 二、问题引入 假设现有4个人...
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 欢迎 改进 留言。 演示地点跳到演示地点 html代码如下`&lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;title&gt;music&lt;/title&gt; &lt;meta charset="utf-8"&gt
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。 1. for - else 什么?不是 if 和 else 才
数据库优化 - SQL优化
前面一篇文章从实例的角度进行数据库优化,通过配置一些参数让数据库性能达到最优。但是一些“不好”的SQL也会导致数据库查询变慢,影响业务流程。本文从SQL角度进行数据库优化,提升SQL运行效率。 判断问题SQL 判断SQL是否有问题时可以通过两个表象进行判断: 系统级别表象 CPU消耗严重 IO等待严重 页面响应时间过长
2019年11月中国大陆编程语言排行榜
2019年11月2日,我统计了某招聘网站,获得有效程序员招聘数据9万条。针对招聘信息,提取编程语言关键字,并统计如下: 编程语言比例 rank pl_ percentage 1 java 33.62% 2 c/c++ 16.42% 3 c_sharp 12.82% 4 javascript 12.31% 5 python 7.93% 6 go 7.25% 7
通俗易懂地给女朋友讲:线程池的内部原理
餐厅的约会 餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”我楞了一下,心里想女朋友今天是怎么了,怎么突然问出这么专业的问题,但做为一个专业人士在女朋友面前也不能露怯啊,想了一下便说:“我先给你讲讲我前同事老王的故事吧!” 大龄程序员老王 老王是一个已经北漂十多年的程序员,岁数大了,加班加不动了,升迁也无望,于是拿着手里
经典算法(5)杨辉三角
杨辉三角 是经典算法,这篇博客对它的算法思想进行了讲解,并有完整的代码实现。
腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹?
昨天,有网友私信我,说去阿里面试,彻底的被打击到了。问了为什么网上大量使用ThreadLocal的源码都会加上private static?他被难住了,因为他从来都没有考虑过这个问题。无独有偶,今天笔者又发现有网友吐槽了一道腾讯的面试题,我们一起来看看。 腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹? 在互联网职场论坛,一名程序员发帖求助到。二面腾讯,其中一个算法题:64匹
面试官:你连RESTful都不知道我怎么敢要你?
面试官:了解RESTful吗? 我:听说过。 面试官:那什么是RESTful? 我:就是用起来很规范,挺好的 面试官:是RESTful挺好的,还是自我感觉挺好的 我:都挺好的。 面试官:… 把门关上。 我:… 要干嘛?先关上再说。 面试官:我说出去把门关上。 我:what ?,夺门而去 文章目录01 前言02 RESTful的来源03 RESTful6大原则1. C-S架构2. 无状态3.统一的接
JDK12 Collectors.teeing 你真的需要了解一下
前言 在 Java 12 里面有个非常好用但在官方 JEP 没有公布的功能,因为它只是 Collector 中的一个小改动,它的作用是 merge 两个 collector 的结果,这句话显得很抽象,老规矩,我们先来看个图(这真是一个不和谐的图????): 管道改造经常会用这个小东西,通常我们叫它「三通」,它的主要作用就是将 downstream1 和 downstre...
为啥国人偏爱Mybatis,而老外喜欢Hibernate/JPA呢?
关于SQL和ORM的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行了一番讨论,感触还是有一些,于是就有了今天这篇文。 声明:本文不会下关于Mybatis和JPA两个持久层框架哪个更好这样的结论。只是摆事实,讲道理,所以,请各位看官勿喷。 一、事件起因 关于Mybatis和JPA孰优孰劣的问题,争论已经很多年了。一直也没有结论,毕竟每个人的喜好和习惯是大不相同的。我也看
SQL-小白最佳入门sql查询一
不要偷偷的查询我的个人资料,即使你再喜欢我,也不要这样,真的不好;
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // doshom...
【图解经典算法题】如何用一行代码解决约瑟夫环问题
约瑟夫环问题算是很经典的题了,估计大家都听说过,然后我就在一次笔试中遇到了,下面我就用 3 种方法来详细讲解一下这道题,最后一种方法学了之后保证让你可以让你装逼。 问题描述:编号为 1-N 的 N 个士兵围坐在一起形成一个圆圈,从编号为 1 的士兵开始依次报数(1,2,3…这样依次报),数到 m 的 士兵会被杀死出列,之后的士兵再从 1 开始报数。直到最后剩下一士兵,求这个士兵的编号。 1、方...
致 Python 初学者
欢迎来到“Python进阶”专栏!来到这里的每一位同学,应该大致上学习了很多 Python 的基础知识,正在努力成长的过程中。在此期间,一定遇到了很多的困惑,对未来的学习方向感到迷茫。我非常理解你们所面临的处境。我从2007年开始接触 python 这门编程语言,从2009年开始单一使用 python 应对所有的开发工作,直至今天。回顾自己的学习过程,也曾经遇到过无数的困难,也曾经迷茫过、困惑过。开办这个专栏,正是为了帮助像我当年一样困惑的 Python 初学者走出困境、快速成长。希望我的经验能真正帮到你
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,...
程序员:我终于知道post和get的区别
是一个老生常谈的话题,然而随着不断的学习,对于以前的认识有很多误区,所以还是需要不断地总结的,学而时习之,不亦说乎
GitHub标星近1万:只需5秒音源,这个网络就能实时“克隆”你的声音
作者 | Google团队 译者 | 凯隐 编辑 | Jane 出品 | AI科技大本营(ID:rgznai100) 本文中,Google 团队提出了一种文本语音合成(text to speech)神经系统,能通过少量样本学习到多个不同说话者(speaker)的语音特征,并合成他们的讲话音频。此外,对于训练时网络没有接触过的说话者,也能在不重新训练的情况下,仅通过未知...
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU...
加快推动区块链技术和产业创新发展,2019可信区块链峰会在京召开
11月8日,由中国信息通信研究院、中国通信标准化协会、中国互联网协会、可信区块链推进计划联合主办,科技行者协办的2019可信区块链峰会将在北京悠唐皇冠假日酒店开幕。   区块链技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术。如果说蒸汽机释放了人类的生产力,电力解决了人类基本的生活需求,互联网彻底改变了信息传递的方式,区块链作为构造信任的技术有重要的价值。   1...
程序员把地府后台管理系统做出来了,还有3.0版本!12月7号最新消息:已在开发中有github地址
第一幕:缘起 听说阎王爷要做个生死簿后台管理系统,我们派去了一个程序员…… 996程序员做的梦: 第一场:团队招募 为了应对地府管理危机,阎王打算找“人”开发一套地府后台管理系统,于是就在地府总经办群中发了项目需求。 话说还是中国电信的信号好,地府都是满格,哈哈!!! 经常会有外行朋友问:看某网站做的不错,功能也简单,你帮忙做一下? 而这次,面对这样的需求,这个程序员...
网易云6亿用户音乐推荐算法
网易云音乐是音乐爱好者的集聚地,云音乐推荐系统致力于通过 AI 算法的落地,实现用户千人千面的个性化推荐,为用户带来不一样的听歌体验。 本次分享重点介绍 AI 算法在音乐推荐中的应用实践,以及在算法落地过程中遇到的挑战和解决方案。 将从如下两个部分展开: AI算法在音乐推荐中的应用 音乐场景下的 AI 思考 从 2013 年 4 月正式上线至今,网易云音乐平台持续提供着:乐屏社区、UGC...
【技巧总结】位运算装逼指南
位算法的效率有多快我就不说,不信你可以去用 10 亿个数据模拟一下,今天给大家讲一讲位运算的一些经典例子。不过,最重要的不是看懂了这些例子就好,而是要在以后多去运用位运算这些技巧,当然,采用位运算,也是可以装逼的,不信,你往下看。我会从最简单的讲起,一道比一道难度递增,不过居然是讲技巧,那么也不会太难,相信你分分钟看懂。 判断奇偶数 判断一个数是基于还是偶数,相信很多人都做过,一般的做法的代码如下...
【管理系统课程设计】美少女手把手教你后台管理
【文章后台管理系统】URL设计与建模分析+项目源码+运行界面 栏目管理、文章列表、用户管理、角色管理、权限管理模块(文章最后附有源码) 1. 这是一个什么系统? 1.1 学习后台管理系统的原因 随着时代的变迁,现如今各大云服务平台横空出世,市面上有许多如学生信息系统、图书阅读系统、停车场管理系统等的管理系统,而本人家里就有人在用烟草销售系统,直接在网上完成挑选、购买与提交收货点,方便又快捷。 试想,若没有烟草销售系统,本人家人想要购买烟草,还要独自前往药...
4G EPS 第四代移动通信系统
目录 文章目录目录4G 与 LTE/EPCLTE/EPC 的架构E-UTRANE-UTRAN 协议栈eNodeBEPCMMES-GWP-GWHSSLTE/EPC 协议栈概览 4G 与 LTE/EPC 4G,即第四代移动通信系统,提供了 3G 不能满足的无线网络宽带化,主要提供数据(上网)业务。而 LTE(Long Term Evolution,长期演进技术)是电信领域用于手机及数据终端的高速无线通...
日均350000亿接入量,腾讯TubeMQ性能超过Kafka
整理 | 夕颜出品 | AI科技大本营(ID:rgznai100)【导读】近日,腾讯开源动作不断,相继开源了分布式消息中间件TubeMQ,基于最主流的 OpenJDK8开发的Tencent Kona JDK,分布式HTAP数据库 TBase,企业级容器平台TKEStack,以及高性能图计算框架Plato。短短一周之内,腾讯开源了五大重点项目。其中,TubeMQ是腾讯大数据平台部门应用的核心组件,...
相关热词 c# plc s1200 c#里氏转换原则 c# 主界面 c# do loop c#存为组套 模板 c# 停掉协程 c# rgb 读取图片 c# 图片颜色调整 最快 c#多张图片上传 c#密封类与密封方法
立即提问