从/ proc读取文件时我有一些奇怪的行为如果我使用prelude的readFile懒惰地读取/ proc/pid/stat - 它可以工作但不是我想要的方式.使用Data.ByteString.readFile切换到严格读取会给我一个空字符串.
我需要在这里严格阅读,以便能够在短时间内比较两次读取的结果.
所以使用System.IO.readFile读取/ proc/pid/stat根本不起作用.它在0.5秒的间隔内给出了相同的结果.我认为这是由于懒惰和半闭合的句柄或其他东西......打开和关闭文件句柄明确地工作.
h <- openFile "/proc/pid/stat" ReadMode
st1 <- hGetLine h; hClose h
Run Code Online (Sandbox Code Playgroud)
但是,如果我们对bytestring进行严格读取,为什么还要这样做呢?对?
这是我被卡住的地方.
import qualified Data.ByteString as B
B.readFile "/proc/pid/stat" >>= print
Run Code Online (Sandbox Code Playgroud)
这总是返回一个空字符串.也在GHCI中测试过.有什么建议.谢谢.
--- 更新 ---
感谢Daniel的建议.
这是我实际需要做的.这可能有助于充分显示我的困境并提出更多一般性建议.
我需要计算流程统计数据.以下是代码的一部分(仅用CPU使用情况)作为示例.
cpuUsage pid = do
st1 <- readProc $ "/proc" </> pid </> "stat"
threadDelay 500000 -- 0.5 sec
st2 <- readProc $ "/proc" </> pid </> "stat"
let sum1 = (read $ words st1 !! 13) +
(read $ words st1 !! 14) …Run Code Online (Sandbox Code Playgroud) 我需要使用epoll for Linux为tcp客户端进行异步连接和断开连接.有分机.Windows中的函数,如ConnectEx,DisconnectEx,AcceptEx等...在tcp服务器标准接受函数正在工作,但在tcp客户端无法正常工作连接和断开...所有套接字都是非阻塞的.
我怎样才能做到这一点?
谢谢!
我一直在Ubuntu 12.04工作,我试图在Bash脚本中实现的一件事是修改系统的代理设置.为了澄清,这将是一个脚本,用于设置我使用我需要的程序和包制作的每个VM.我可以通过系统设置手动查找和编辑代理设置并选择网络,但我的目的是自动执行此部分.
我迄今为止尝试过的代码是:
gconftool --set /system/http_proxy/host --type string *host*
gconftool --set /system/http_proxy/port --type int *port*
gconftool --set /system/http_proxy/use_http_proxy --type bool true
gconftool --set /system/http_proxy/use_same_proxy --type bool true
gconftool --set /system/proxy/mode --type string manual
Run Code Online (Sandbox Code Playgroud)
我也试过上面的gconftool-2.任何帮助,将不胜感激.
ldd是一种检查给定可执行文件正在或将要使用的共享库的简单方法.但是它并不总是按预期工作.例如,请参阅以下shell片段,演示如何"失败"将libreadline"依赖"发现到python二进制文件中
我尝试了很多其他发行版,但我是从Tikanga复制的
$ lsb_release -a
LSB Version: :core-4.0-amd64:core-4.0-ia32:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-ia32:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-ia32:printing-4.0-noarch
Distributor ID: RedHatEnterpriseServer
Description: Red Hat Enterprise Linux Server release 5.6 (Tikanga)
Release: 5.6
Codename: Tikanga
Run Code Online (Sandbox Code Playgroud)
查看ldd默认安装的内容python(来自官方存储库).
$ which python
/usr/bin/python
$ ldd `which python`
libpython2.4.so.1.0 => /usr/lib64/libpython2.4.so.1.0 (0x00000030e6200000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00000030e0e00000)
libdl.so.2 => /lib64/libdl.so.2 (0x00000030e0a00000)
libutil.so.1 => /lib64/libutil.so.1 (0x00000030ee800000)
libm.so.6 => /lib64/libm.so.6 (0x00000030e0600000)
libc.so.6 => /lib64/libc.so.6 (0x00000030e0200000)
/lib64/ld-linux-x86-64.so.2 (0x00000030dfe00000)
$ ldd `which python` | grep readline
$
Run Code Online (Sandbox Code Playgroud)
没有找到关于readline的内容.现在我从交互式使用中知道这个二进制文件确实具有实际功能,所以不要试图看看它来自何处.
$ python &
[1] 21003
$ Python …Run Code Online (Sandbox Code Playgroud) 关于以下链接:http: //www.archlinux.org/news/libpnglibtiff-rebuilds-move-from-testing/
有人可以向我解释为什么在更新其中一个库之后应该重建一个程序吗?
这有什么意义,因为"主"文件根本没有改变?
我正在使用函数调用fwrite()将数据写入Linux上的管道.
早些时候,fwrite()反复调用小块数据(平均20个字节)并留下缓冲fwrite().过程表明,一次写入4096字节的数据.
原来,这个写作过程是我程序的瓶颈.所以我决定将我的代码中的数据缓冲到64KB的块中,然后一次写入整个块fwrite().我曾经setvbuf()将FILE*指针设置为'No Buffering'.
性能提升并不像我预期的那么重要.
更重要的是,strace输出显示数据仍然一次写入4096个字节.有人可以向我解释一下这种行为吗?如果我fwrite()使用64KB数据调用,为什么一次只写4096个字节?
是否有fwrite()使用FILE*指针将数据写入管道的替代方法?
有各种命令行工具可用于编辑音频文件的元数据.但是他们都不能编辑音频文件的"专辑艺术家"标签.有没有命令行工具或perl模块做同样的事情?谢谢
我在fedora 13中安装了xampp.我正在尝试通过串口使用php串口与微控制器通信.我的代码是example.php
include("php_serial.class.php");
$serial = new phpSerial();
$serial->deviceSet("0");
$serial->confBaudRate(9600); //Baud rate: 9600
$serial->confParity("none"); //Parity (this is the "N" in "8-N-1")
$serial->confCharacterLength(8); //Character length (this is the "8" in "8-N-1")
$serial->confStopBits(1); //Stop bits (this is the "1" in "8-N-1")
$serial->confFlowControl("none"); //Device does not support flow control of any kind, so set it to none.
//Now we "open" the serial port so we can write to it
$serial->deviceOpen();
$serial->sendMessage("*1" ); //sleep(1); // echo "hi"; $serial->deviceClose();
?>
Run Code Online (Sandbox Code Playgroud)
php脚本被执行但提供以下警告.
警告:指定的串行端口在第147行的/opt/lampp/htdocs/xampp/php_serial.class.php中无效警告:无法设置波特率:未在/ opt/lampp/htdocs中设置或打开设备第241行/xampp/php_serial.class.php警告:无法设置奇偶校验:设备未在第295行的/opt/lampp/htdocs/xampp/php_serial.class.php中设置或打开
...我使用了命令:chmod 0777/dev/ttyUSB0来授予权限.我还尝试使用命令将apache用户"prudhvi"添加到拨出组:$ usermod …
我想chef在ubuntu盒子上安装(从opscode).我对linux不是很熟悉,但我必须chef在Linux上快速安装.
安装指南中的一个步骤说
Create /etc/apt/sources.list.d/opscode.list
Run Code Online (Sandbox Code Playgroud)
这条线是什么意思?我现在应该创建一个目录opscode.list或文件?
/etc/apt/sources.list.d/ 目录已存在.
当我尝试触发以下命令 - >
cd /etc/apt/sources.list.d/
mkdir opscode.list
Run Code Online (Sandbox Code Playgroud)
我得到以下 - >
mkdir: cannot create directory `opscode.list': Permission denied
Run Code Online (Sandbox Code Playgroud)
如何解决权限被拒绝的问题?
众所周知,.bss段没有存储在磁盘中,但是内存中的.bss段应该初始化为零.但它应该在记忆中的哪个位置?是否有任何信息显示在ELF标题中或者.bss部分可能出现在数据部分旁边,还是其他什么?