我需要记录套接字使用情况,并编写了一个LD_PRELOAD库.
问题是当我覆盖read()和write()时,普通文件操作也被记录(当然).
那么如何区分普通文件描述符和套接字描述符呢?
我正在尝试编写一个程序,根据配置文件(基本上是路径优先级对)自动设置进程优先级.
我认为最好的解决方案是替换execve()系统调用的内核模块.太糟糕了,系统调用表不会在内核版本> 2.6.0中导出,因此如果没有真正难看的黑客攻击,就无法替换系统调用.
我不希望做到以下几点:
- 使用shell脚本替换二进制文件,启动和重新编写二进制文件.-Patch /重新编译我的股票Ubuntu内核 - 像阅读内核可执行内存和猜测syscall表位置一样丑陋的黑客 - 运行进程的轮询
我真的想成为:
- 能够根据可执行路径和配置文件控制任何进程的优先级.规则适用于任何用户.
你们有没有人对如何完成这项任务有任何想法?
这是一个简短的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) 我有一个很大的类型
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没有.
所以看起来我可以在两个"次优"解决方案之间做出选择:
我认为应该有第三种"最佳"方式:只为值构造函数编写一个无法自动执行的实现,即执行以下操作:
instance Hashable Value where
hashWithSalt (VUTCTime t) = ... -- custom implementation
hashWithSalt _ = ... -- use the default implementation
Run Code Online (Sandbox Code Playgroud)
当然可以更普遍地提出问题:如何在某些值构造函数的情况下重用现有的实例实现,同时在特定情况下拥有自己的实现,而无需为每个值构造函数编写样板文件.