gpt4 book ai didi

linux - OCaml 文件 I/O : why is add_channel returning empty content for/proc//cmdline?

转载 作者:太空宇宙 更新时间:2023-11-04 10:06:48 24 4
gpt4 key购买 nike

我正在尝试阅读 /proc/<PID>/cmdline 的内容,但在一种情况下我得到一个空字符串,而在另一种情况下我得到预期的内容。

为什么以下不适用于此文件,但适用于其他文件:

let read_file (filename : string) : string =
let ic = open_in_bin filename in
let len = in_channel_length ic in
let buf = Buffer.create (in_channel_length ic) in
Buffer.add_channel buf ic len;
let content = Buffer.contents buf in
close_in ic;
content

但是,以下适用于所有文件,包括 proc/<PID>/cmdline :

let read_file (filename : string) : string =
let ic = open_in filename in
let buf = Buffer.create (in_channel_length ic) in
let contents =
try
while true do
let line = input_line ic in
Buffer.add_string buf line;
Buffer.add_char buf '\n';
done; assert false
with End_of_file ->
Buffer.contents buf in
String.trim contents

最佳答案

第一个版本不起作用,因为 /proc/<PID>/cmdline (以及 procfs 虚拟文件系统中的任何其他文件)不是常规文件,并且 in_channel_length

(** Return the size (number of characters) of the regular file .. *)

例如,您可能会注意到 filedu还认为 cmdline 文件是空的:

$ file /proc/1/cmdline 
/proc/1/cmdline: empty

$ du -h /proc/1/cmdline
0 /proc/1/cmdline

您的第一个函数并不总是适用于其他非常规文件,例如管道。

关于linux - OCaml 文件 I/O : why is add_channel returning empty content for/proc/<PID>/cmdline?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51987826/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com