小编net*_*tom的帖子

如何判断文件句柄是否是套接字?

我需要记录套接字使用情况,并编写了一个LD_PRELOAD库.

问题是当我覆盖read()和write()时,普通文件操作也被记录(当然).

那么如何区分普通文件描述符和套接字描述符呢?

c unix sockets posix

13
推荐指数
1
解决办法
4036
查看次数

在Linux下自动调整进程优先级

我正在尝试编写一个程序,根据配置文件(基本上是路径优先级对)自动设置进程优先级.

我认为最好的解决方案是替换execve()系统调用的内核模块.太糟糕了,系统调用表不会在内核版本> 2.6.0中导出,因此如果没有真正难看的黑客攻击,就无法替换系统调用.

希望做到以下几点:

- 使用shell脚本替换二进制文件,启动和重新编写二进制文件.-Patch /重新编译我的股票Ubuntu内核 - 像阅读内核可执行内存和猜测syscall表位置一样丑陋的黑客 - 运行进程的轮询

真的想成为:

- 能够根据可执行路径和配置文件控制任何进程的优先级.规则适用于任何用户.

你们有没有人对如何完成这项任务有任何想法?

linux process

8
推荐指数
1
解决办法
3288
查看次数

使用Haskell和流融合不断增加CPU消耗

这是一个简短的Haskell程序,可产生440 Hz的声音.它使用pulseaudio作为音频后端.

import GHC.Float
import Control.Arrow
import Sound.Pulse.Simple
import qualified Data.List.Stream as S
import Data.List

type Time = Double
type Frequency = Double
type Sample = Double
type CV = Double

chunksize = 441 * 2
sampleRate :: (Fractional a) => a
sampleRate = 44100

integral :: [Double] -> [Double]
integral = scanl1  (\acc x -> acc + x / sampleRate)

chunks :: Int -> [a] -> [[a]]
chunks n = S.takeWhile (not . S.null) . S.unfoldr (Just . S.splitAt …
Run Code Online (Sandbox Code Playgroud)

haskell memory-leaks cpu-usage stream-fusion

5
推荐指数
1
解决办法
177
查看次数

为大型和类型编写Hashable实例

我有一个很大的类型

data Value
= VNull
| VDouble !Double
| VSci !Scientific
| VInt !Int
| VText !Text
| VTexts ![Text]
| VByteString !BS.ByteString
| VUTCTime !UTCTime
-- This goes on for quite a few more lines
Run Code Online (Sandbox Code Playgroud)

我需要一个Hashable实例用于此数据类型.我当然可以手动输入实例,但幸运的是有一个基于泛型的hashWithSalt的默认实现.

不幸的是 - 据我所知 - 这需要任何可以在Value类型中"打包"的类型才能拥有Hashable实例.那么,UTCTime没有.

所以看起来我可以在两个"次优"解决方案之间做出选择:

  1. 手动输入Hashable实例.
  2. 编写Hashable UTCTime的孤立实例

我认为应该有第三种"最佳"方式:只为值构造函数编写一个无法自动执行的实现,即执行以下操作:

instance Hashable Value where
    hashWithSalt (VUTCTime t) = ... -- custom implementation
    hashWithSalt _ = ... -- use the default implementation
Run Code Online (Sandbox Code Playgroud)

当然可以更普遍地提出问题:如何在某些值构造函数的情况下重用现有的实例实现,同时在特定情况下拥有自己的实现,而无需为每个值构造函数编写样板文件.

haskell types generic-programming

1
推荐指数
1
解决办法
138
查看次数