Articles of procfs

从内核读取使用procfs的时间戳 – 从内核读取后存储在哪里?

当中断发生在内核和如果我正在读取内核中的时间戳。 我正在通过procfs从内核读取用户的时间戳。 中断时间值将被存储在哪里? 用户应该如何从用户空间读取该值? ssize_t dev_read(struct file *filp,const char *buf,size_t count,loff_t *offset) { if ( count < sizeof(InterruptTime) ) { // Not enough space provided. return 0; // Or some error code maybe. } if (copy_to_user(buf,&InterruptTime,sizeof(InterruptTime)) { return -EFAULT; } else { return sizeof(InterruptTime); // Number of bytes we copied. } } 这是我在/linuxversion/net/core/dev.c中修改的代码 int netif_rx(struct […]

为什么proc / ID / maps具有共享库的多个条目

我正在研究embedded式Linux下的proc / ID / maps,而且我注意到一些共享库在一个进程的内存映射中出现了几次,为什么呢? 40094000-400d9000 r-xp 00000000 b3:09 723 /system/lib/libc.so 400d9000-400da000 —p 00000000 00:00 0 400da000-400dc000 r-xp 00045000 b3:09 723 /system/lib/libc.so 400dc000-400de000 rwxp 00047000 b3:09 723 /system/lib/libc.so 400de000-400e9000 rwxp 00000000 00:00 0 400e9000-400ed000 r-xp 00000000 b3:09 770 /system/lib/libgccdemangle.so 400ed000-400ee000 —p 00000000 00:00 0 400ee000-400ef000 r-xp 00004000 b3:09 770 /system/lib/libgccdemangle.so 400ef000-400f0000 rwxp 00005000 b3:09 770 […]

/ proc / pid / loginuid中的一些uid是奇怪的

我正在分析unix / linux中的procfs,一些进程的loginuid真的很奇怪。 有些PID有一个很大的数字:4294967295。他们是守护进程还是系统事件,或者最近怎么回事? # cat /proc/11071/loginuid 4294967295

Linux内核/ proc FIFO /pipe道

我目前正在尝试创build一个内核模块,它将根据内核事件生成数据,并将它们推送到一个文件中。 在阅读后,这是不好的(我同意),我决定将一个/ proc文件中的数据放在一个用户程序可以从必要时拉的数据更有意义。 然而,这个想法导致了各种各样的问题,特别是在何时以及如何清除这个文件。 所以我想……“为什么我不在/ proc中创build一个命名pipe道,并从中读取? 我有一个为proc文件设置读取函数和写入函数的一般要点,但是我仍然有一个概念上的麻烦,我怎么去做这件事。 也就是说,我将如何编写这样一个函数来获取任意数据并将其写入内核的pipe道? 有没有人有任何想法如何将数据从内核空间推送到命名pipe道? 最后,它不一定是/ proc文件(特别是如果我这样做是错误的),但这是我来到的结论。 然后,我将不得不弄清楚如何从用户空间程序附加到它,但我觉得这是一个单独的问题。

Linux的c + +:apis与/ proc文件?

我工作的应用程序来收集和发送系统信息的各种位(分区空间/免费,笔记本电池信息等)。 我没有太多的成功得到这个信息的forms直接c + + api ..虽然它的所有可用通过文件在/ proc(或类似)。 所以 – 我想知道是否读取/parsing我的c + +应用程序中的这些文件是获取此信息的适当方式,或者我应该不断尝试发现API? (注意:我正在使用statvfs)。 到目前为止,在Win32中收集这类信息似乎更容易。 看起来很奇怪。

通过/ proc / mounts监视挂载点更改

根据proc手册,可以通过打开“/ proc / mounts”并在select()调用中添加文件描述符来读取fd_set来监视linux系统中的挂载点更改。 以下代码在Ubuntu 9.04上运行,而不是在Ubuntu 10.04(2.6.32 linux内核)下运行: int mfd = open("/proc/mounts", O_RDONLY, 0); fd_set rfds; struct timeval tv; int rv; FD_ZERO(&rfds); FD_SET(mfd, &rfds); tv.tv_sec = 5; tv.tv_usec = 0; int changes = 0; while ((rv = select(mfd+1, &rfds, NULL, NULL, &tv)) >= 0) { if (FD_ISSET(mfd, &rfds)) { fprintf(stdout, "Mount points changed. %d.\n", changes++); […]

如何parsing通过/ proc文件传递给内核模块的大量数据?

编辑:我已经findseq_file ,可以轻松地从内核写入大量的数据到用户空间。 我正在寻找的是相反的; 一个API,便于从用户空间读取大量数据(多个页面)。 编辑2 :我正在执行一个<stdio.h>的端口作为内核模块,能够打开类似于FILE的/proc (以及后来的其他虚拟文件系统),并处理类似于<stdio.h>input和输出<stdio.h> 。 你可以在这里find项目。 我发现很多关于内核如何将大量数据写入/ proc(用于用户空间程序)的问题,但是却没有其他办法。 让我详细说明一下: 这个问题基本上是关于input被标记的algorithm(例如int或者int和string的混合等), 假设数据可能在多个缓冲区之间被破坏 。 例如,想象下面的数据被发送到内核模块: 12345678 81234567 78123456 67812345 5678 1234 45678123 3456 7812 23456781 为了这个例子,我们假设Linux提供/ proc处理程序的页面大小是20个字节(相对于真实的4KB)。 从/ proc(在内核模块中)读取数据的函数会看到这样的数据: call 1: "12345678 81234567 78" call 2: "123456 67812345 5678" call 3: " 1234 45678123 3456 " call 4: "7812 23456781" 正如你所看到的,当第一次调用78时,它不应该被处理,直到下一个帧才能决定78是一个整数还是一个帧之间的一个剪切。 现在我发现seq_file显然只是在内核想要写数据给用户而不是读 (或者可能是HOWTO被写成可怕的)的时候。 我做了什么 […]

在Python 3中给出一个套接字和inode的进程ID

/ proc / net / tcp给我一个套接字的本地地址,端口和inode号码(例如0.0.0.0:5432和9289)。 鉴于上述信息,我想find特定进程的PID。 可以打开/ proc中的每个编号文件夹,然后使用诸如“$ sudo ls -l / proc / * / fd / 2> / dev / null | grep socket”等shell命令检查符号链接是否匹配套接字/ inode编号。 但是,这似乎在计算上比所需的更昂贵,因为任何给定系统上的进程的<5%都具有开放的TCP套接字。 find已打开给定套接字的PID的最有效方法是什么? 我宁愿使用标准库,而我目前正在用Python 3.2.3进行开发。 编辑:从问题中删除代码示例,因为它们现在包含在下面的答案中。

/ proc中可能的内部套接字状态列表

我想知道/proc/net/tcp中st列的可能值。 我认为st列等于来自netstat(8)或ss(8) STATE列。 我已经设法识别三个代码: sl local_address rem_address st tx_queue rx_queue tr tm->when retrnsmt uid timeout inode 0: 0100007F:08A0 00000000:0000 0A 00000000:00000000 00:00000000 00000000 0 0 7321 1 ffff81002f449980 3000 0 0 2 -1 1: 00000000:006F 00000000:0000 0A 00000000:00000000 00:00000000 00000000 0 0 6656 1 ffff81003a30c080 3000 0 0 2 -1 2: 00000000:0272 00000000:0000 0A 00000000:00000000 […]

了解/ proc / / io中的计数器

我正在为Munin创build一个插件来监视指定进程的统计信息。 信息来源之一是/proc/[pid]/io 。 但是我很难找出rchar / wchar和read_bytes / written_bytes之间的区别。 它们不一样,因为它们提供不同的价值。 他们代表什么?