Articles of Linux操作系统

无法看到从Java类执行的Perl输出

我正在使用Java类在Linux机器上执行Perl脚本。 .class正在成功创build。 但是当我执行这个类的时候,它说exit code successful as sop ,但是我不能够看到Perl的输出或者脚本的执行。 如果我直接执行Perl,它工作正常… 这是Perl脚本: #!/usr/local/bin/perl print ("Enter the distance to be converted:\n"); $originaldist = <STDIN>; chop ($originaldist); $miles = $originaldist * 0.6214; $kilometers = $originaldist * 1.609; print ($originaldist, " kilometers = ", $miles, " miles\n"); 这是我的Java类来调用脚本: import java.io.InputStream; import java.io.InputStreamReader; import java.io.BufferedReader; import java.io.IOException; class test { public […]

如何处理与Git的这个补丁问题?

我目前正在使用git的项目。 基本上,我的git树由三个分支组成: 分行 – 答 :原产地分支,从中派生我的工作。 分支B :基于A的分支。 B包含开发工作( A的新function)。 分支C :由于时间pipe理的原因,我也开始为新function开发不完整的实验选项。 这个实验代码直接添加到B中 。 所以C是B的清理分支,只保留完全可操作的代码。 分支关系可以用这种方式来表示: 一个 头 – > B – > 提交0 – > … – > 提交n – > C – > 清理提交 分支B包含所有新特征的代码,有时还混合有正在开发中的可选分段。 C中的所有提交都删除了实验部分。 分支C中的代码是干净的,我想从中伪造一个补丁。 补丁应该包括从C的最后一次提交到A的所有更改。 如果我做了git format-patch master –stdout > my_patch.patch ,就会产生一个补丁,这个补丁会在操作代码中有效地结束。 但是这样做不好,因为在补丁中,实验代码被添加(通过B中的一些提交),然后被删除(清理C中的提交)。 除了不聪明之外,这还包括无用的额外空间(这意味着额外的邮件与社区共享补丁)以及额外的应用程序开销。 我应该如何操作这些分支来产生干净的补丁? 请注意,我想保留到目前为止在分支B所做的实验工作,我只是不想将其包含在补丁中。

在Linux上将MSword转换为XML / HTML

我需要将MSWord文件转换为XML或HTML,同时保留文件的结构(主要是表格)。 我碰巧find了tika,它在从MSword文件(和任何文件)中提取文本方面function非常强大,如下所示: curl www.vit.org/downloads/doc/tariff.doc \ | java -jar tika-app-1.3.jar –text 我可以从选项中select将输出保存为html / XML,如下所示: curl www.vit.org/downloads/doc/tariff.doc \ | java -jar tika-app-1.3.jar –html 但是输出基本上就像用HTML编写的纯文本,所以不可能得到表格结构和其他文档元素。 在Perl或Python中,是否有任何Tika的实现可以将文档转换为XML / HTML,同时维护其元素的结构? 还是有任何其他工具在Linux上可以做到这一点?

当父进程和subprocess读取相同的文件并写入其他同一文件时会发生什么?

#include <fcntl.h> #include <stdlib.h> int fdrd,fdwt; char c; void rdwrt(); main(int argc,char *argv[]) { if(argc!=3) exit(1); if((fdrd=open(argv[1],O_RDONLY))==-1) exit(1); if((fdwt=creat(argv[2],0666))==01) exit(1); fork(); rdwrt(); exit(0); } void rdwrt() { for(;;) { if(read(fdrd,&c,1)!=1) return; write(fdwt,&c,1); } } 该程序分叉一个subprocess,然后父进程和subprocess尝试读取相同的input文件并写入相同的输出文件。 像这样执行这个程序: [root@localhost]./a.out input output input文件的内容是: abcdefghijklmnopqrstuvwxyz abcdefghijklmnopqrstuvwxyz abcdefghijklmnopqrstuvwxyz abcdefghijklmnopqrstuvwxyz abcdefghijklmnopqrstuvwxyz abcdefghijklmnopqrstuvwxyz 我认为输出文件对input文件应该有相同数量的字符,尽pipe根据这两个进程的竞争,字符顺序可能不一样。 事实certificate,输出文件是: abcdefghijklmnonqbcdefghijklwxyczdefjklpqrstuvwxyz abcefgklmvwxefgklmnopqrstuvw qrstuyz abcdhijxyz 实际上,这两个文件有不同的字符编号 : [root@localhost]wc […]

可以dup2真的返回EINTR?

在规范和两个实现中: 根据POSIX, dup2()可能会返回EINTR。 Linux的手册页列出了允许的。 FreeBSD手册页表明它从未返回。 这是一个错误 – 因为它的紧密实现可以EINTR(至less为TCP徘徊,如果没有别的)。 事实上,Linux可以返回EINTR为dup2() ? 大概如果是这样,这将是因为close()决定等待,并且一个信号到达(TCPclosures或试图在closures时同步的文件系统驱动程序)。 实际上,FreeBSD是否保证不返回EINTR for dup2() ? 在这种情况下,它一定是不用等待旧fd上的任何未完成的操作,而只是将fd解除链接。 POSIX dup2()在引用“closing”(而不是斜体)而不是引用实际的close()函数时意味着什么?我们理解它只是以非正式的方式来“closures”它(取消链接文件描述符),还是试图说效果应该像close()函数首先被调用,然后dup2()被自动调用。 如果fildes2已经是一个有效的开放文件描述符,则它应该先closures,除非fildes等于fildes2,在这种情况下dup2()应该返回fildes2而不closures它。 如果dup2()不得不closures,等待,然后primefacesdup,这将是一个执行者的噩梦! 这比EINTR差很多close()失败)。 懦弱的POSIX甚至不会说在EINTR的情况下是否发生了dup …

getenv函数不返回预期的答案

我试图访问我的environementvariables之一,这是JAVA_HOME 。 为此,我使用getenv()函数,如下所示: #include <iostream> #include <string.h> int main() { const char* env = getenv("JAVA_HOME"); if(env != NULL) std::cout << "Environnement : " << env << std::endl; else std::cout << "NULL" << std::endl; return 0; } 我tryed std::getenv("PATH"); 这会返回一些与我的文件/etc/bash.bashrc不同的地方,在这里我放置了我的JAVA_HOMEvariables。 我期望std::getenv("JAVA_HOME")返回我放在我的/etc/bash.bashrc文件。 现在它返回不同的东西。 我怎样才能得到一个正确的environementvariables? 我究竟做错了什么 ? 我在Ubuntu 12.04下使用C ++ 11与QtCreator进行GCC 4.7.2 编辑:代码 包括是包含的简写 增加了NULL处理 编辑:进展 我试过extern char […]

编译无限期运行的Linux守护进程的最佳工具?

我想知道有什么替代方法来编写一个无限期地运行PHP脚本的守护进程。 换句话说:执行PHP脚本—>进程—>完成—>重复。 这可以写在Bash? 还是C? 有没有可能我可以安装的Linux工具,可以无限期地为我运行这样的事情? 常用什么办法来处理这个任务? 更新:即时通讯使用centos

使用sed将缺less的ServerName添加到httpd.conf文件中

我在httpd.conf文件中有以下虚拟主机 <VirtualHost *:80> ## could be comments could be any line could be any line could be any line </VirtualHost> <VirtualHost *:80> could be any line ## could be comments could be any line could be any line could be any line could be any line could be any line </VirtualHost> <VirtualHost *:80> ## may […]

通过Cygwin发送电子邮件

我写了一个shell脚本,我想通过它发送一封邮件。 我通过cygwin在Windows上执行此脚本。 我在我的机器上安装了电子邮件软件包。 但是,我正在努力工作。 请让我知道什么是通过cygwin命令提示符发送电子邮件最简单的方法。 我的ssmtp.conf文件是: mailhub=smtp.gmail.com:587 FromLineOverride=YES rewriteDomain=gmail.com root=aci.lfindba@gmail.com UseTLS=YES AuthUser=userid AuthPass=password 和email.conf文件有: SMTP_SERVER = 'smtp.gmail.com' SMTP_PORT = '25' MY_NAME = 'ABC' MY_EMAIL = 'emailaddress' REPLY_TO = 'emailaddress' USE_TLS = 'true' ADDRESS_BOOK = '&/email.address.template' SMTP_AUTH = 'LOGIN' SMTP_AUTH_USER = 'userid' SMTP_AUTH_PASS = 'password' 我正在使用下面的命令来发送电子邮件:echo“mail body”| email -s“subject”recipient@gmail.com但是,我收到以下错误: 电子邮件:致命:无法连接到服务器:smtp.gmail.com上端口:25:不允许操作 请帮忙。

吞吐量的变化,吞吐量从4k降到9

我有一个networking客户端和服务器应用程序。 数据stream是这样的:客户端向服务器发送消息,服务器以确认响应。 只有在收到确认的情况下,客户端才能看到下一条消息。 用C ++编写的客户端应用程序有3个线程,即networking线程(负责通过套接字发送消息),主线程(负责发出请求消息)和计时器线程(每秒触发一次)。 服务器应用程序有2个线程,主线程和networking线程。 我运行RHEL 6.3,2.6.32-279内核。 configuration1 tuned-admconfiguration文件延迟性能 所有客户端的线程在相同的CPU核心ID上 所有服务器的线程在相同的CPU Core ID上,但与客户端线程不同 客户端和服务器在同一台机器上运行 吞吐量:每秒4500条消息 configuration2 tuned-admconfiguration文件吞吐量性能 所有客户端的线程在相同的CPU核心ID上 所有服务器的线程在相同的CPU Core ID上,但与客户端线程不同 客户端和服务器在同一台机器上运行 吞吐量:每秒9-15条消息 configuration3 tuned-admconfiguration文件吞吐量性能 所有客户端的线程在不同的CPU核心ID上 所有服务器的线程在不同的CPU核心ID上,以及来自客户线程的不同的核心ID 客户端和服务器在同一台机器上运行 吞吐量:每秒1100条消息 机器的负载可以忽略不计。 当configuration文件从延迟性能切换到吞吐量性能时,有人可以解释每秒从4k降低到9个消息的情况吗?