Android获取系统cpu信息,内存,版本,电量等信息

Android获取系统cpu信息,内存,版本,电量等信息,第1张

1、CPU频率,CPU信息:/proc/cpuinfo和/proc/stat

通过读取文件/proc/cpuinfo系统CPU的类型等多种信息。

读取/proc/stat 所有CPU活动的信息来计算CPU使用率

下面我们就来讲讲如何通过代码来获取CPU频率:

复制代码 代码如下:

package comorangecpu;

import javaioBufferedReader;

import javaioFileNotFoundException;

import javaioFileReader;

import javaioIOException;

import javaioInputStream;

public class CpuManager {

// 获取CPU最大频率(单位KHZ)

// "/system/bin/cat" 命令行

// "/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq" 存储最大频率的文件的路径

public static String getMaxCpuFreq() {

String result = "";

ProcessBuilder cmd;

try {

String[] args = { "/system/bin/cat",

"/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq" };

cmd = new ProcessBuilder(args);

Process process = cmdstart();

InputStream in = processgetInputStream();

byte[] re = new byte[24];

while (inread(re) != -1) {

result = result + new String(re);

}

inclose();

} catch (IOException ex) {

exprintStackTrace();

result = "N/A";

}

return resulttrim();

}

// 获取CPU最小频率(单位KHZ)

public static String getMinCpuFreq() {

String result = "";

ProcessBuilder cmd;

try {

String[] args = { "/system/bin/cat",

"/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_min_freq" };

cmd = new ProcessBuilder(args);

Process process = cmdstart();

InputStream in = processgetInputStream();

byte[] re = new byte[24];

while (inread(re) != -1) {

result = result + new String(re);

}

inclose();

} catch (IOException ex) {

exprintStackTrace();

result = "N/A";

}

return resulttrim();

}

// 实时获取CPU当前频率(单位KHZ)

public static String getCurCpuFreq() {

String result = "N/A";

try {

FileReader fr = new FileReader(

"/sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq");

BufferedReader br = new BufferedReader(fr);

String text = brreadLine();

result = texttrim();

} catch (FileNotFoundException e) {

eprintStackTrace();

} catch (IOException e) {

eprintStackTrace();

}

return result;

}

// 获取CPU名字

public static String getCpuName() {

try {

FileReader fr = new FileReader("/proc/cpuinfo");

BufferedReader br = new BufferedReader(fr);

String text = brreadLine();

String[] array = textsplit(":s+", 2);

for (int i = 0; i < arraylength; i++) {

}

return array[1];

} catch (FileNotFoundException e) {

eprintStackTrace();

} catch (IOException e) {

eprintStackTrace();

}

return null;

}

}

2、内存:/proc/meminfo

复制代码 代码如下:

public void getTotalMemory() {

String str1 = "/proc/meminfo";

String str2="";

try {

FileReader fr = new FileReader(str1);

BufferedReader localBufferedReader = new BufferedReader(fr, 8192);

while ((str2 = localBufferedReaderreadLine()) != null) {

Logi(TAG, "---" + str2);

}

} catch (IOException e) {

}

}

3、Rom大小

复制代码 代码如下:

public long[] getRomMemroy() {

long[] romInfo = new long[2];

//Total rom memory

romInfo[0] = getTotalInternalMemorySize();

//Available rom memory

File path = EnvironmentgetDataDirectory();

StatFs stat = new StatFs(pathgetPath());

long blockSize = statgetBlockSize();

long availableBlocks = statgetAvailableBlocks();

romInfo[1] = blockSize availableBlocks;

getVersion();

return romInfo;

}

public long getTotalInternalMemorySize() {

File path = EnvironmentgetDataDirectory();

StatFs stat = new StatFs(pathgetPath());

long blockSize = statgetBlockSize();

long totalBlocks = statgetBlockCount();

return totalBlocks blockSize;

}

4、sdCard大小

复制代码 代码如下:

public long[] getSDCardMemory() {

long[] sdCardInfo=new long[2];

String state = EnvironmentgetExternalStorageState();

if (EnvironmentMEDIA_MOUNTEDequals(state)) {

File sdcardDir = EnvironmentgetExternalStorageDirectory();

StatFs sf = new StatFs(sdcardDirgetPath());

long bSize = sfgetBlockSize();

long bCount = sfgetBlockCount();

long availBlocks = sfgetAvailableBlocks();

sdCardInfo[0] = bSize bCount;//总大小

sdCardInfo[1] = bSize availBlocks;//可用大小

}

return sdCardInfo;

}

5、电池电量

复制代码 代码如下:

private BroadcastReceiver batteryReceiver=new BroadcastReceiver(){

@Override

public void onReceive(Context context, Intent intent) {

int level = intentgetIntExtra("level", 0);

// level加%就是当前电量了

}

};

registerReceiver(batteryReceiver, new IntentFilter(IntentACTION_BATTERY_CHANGED));

6、系统的版本信息

复制代码 代码如下:

public String[] getVersion(){

String[] version={"null","null","null","null"};

String str1 = "/proc/version";

String str2;

String[] arrayOfString;

try {

FileReader localFileReader = new FileReader(str1);

BufferedReader localBufferedReader = new BufferedReader(

localFileReader, 8192);

str2 = localBufferedReaderreadLine();

arrayOfString = str2split("s+");

version[0]=arrayOfString[2];//KernelVersion

localBufferedReaderclose();

} catch (IOException e) {

}

version[1] = BuildVERSIONRELEASE;// firmware version

version[2]=BuildMODEL;//model

version[3]=BuildDISPLAY;//system version

return version;

}

7、mac地址和开机时间

复制代码 代码如下:

public String[] getOtherInfo(){

String[] other={"null","null"};

WifiManager wifiManager = (WifiManager) mContextgetSystemService(ContextWIFI_SERVICE);

WifiInfo wifiInfo = wifiManagergetConnectionInfo();

if(wifiInfogetMacAddress()!=null){

other[0]=wifiInfogetMacAddress();

} else {

other[0] = "Fail";

}

other[1] = getTimes();

return other;

}

private String getTimes() {

long ut = SystemClockelapsedRealtime() / 1000;

if (ut == 0) {

ut = 1;

}

int m = (int) ((ut / 60) % 60);

int h = (int) ((ut / 3600));

return h + " " + mContextgetString(Rstringinfo_times_hour) + m + " "

+ mContextgetString(Rstringinfo_times_minute);

}

/

获取手机自身内存路径

/

public static String getPhoneCardPath(){

return EnvironmentgetDataDirectory()getPath();

}

/

获取sd卡路径

双sd卡时,根据”设置“里面的数据存储位置选择,获得的是内置sd卡或外置sd卡

@return

/

public static String getNormalSDCardPath(){

return EnvironmentgetExternalStorageDirectory()getPath();

}

/

获取sd卡路径

双sd卡时,获得的是外置sd卡

@return

/

public static String getSDCardPath() {

String cmd = "cat /proc/mounts";

Runtime run = RuntimegetRuntime();// 返回与当前 Java 应用程序相关的运行时对象

BufferedInputStream in=null;

BufferedReader inBr=null;

try {

Process p = runexec(cmd);// 启动另一个进程来执行命令

in = new BufferedInputStream(pgetInputStream());

inBr = new BufferedReader(new InputStreamReader(in));

String lineStr;

while ((lineStr = inBrreadLine()) != null) {

// 获得命令执行后在控制台的输出信息

Logi("CommonUtil:getSDCardPath", lineStr);

if (lineStrcontains("sdcard")

&& lineStrcontains("android_secure")) {

String[] strArray = lineStrsplit(" ");

if (strArray != null && strArraylength >= 5) {

String result = strArray[1]replace("/android_secure",

"");

return result;

}

}

// 检查命令是否执行失败。

if (pwaitFor() != 0 && pexitValue() == 1) {

// pexitValue()==0表示正常结束,1:非正常结束

Loge("CommonUtil:getSDCardPath", "命令执行失败!");

}

}

} catch (Exception e) {

Loge("CommonUtil:getSDCardPath", etoString());

//return EnvironmentgetExternalStorageDirectory()getPath();

}finally{

try {

if(in!=null){

inclose();

}

} catch (IOException e) {

// TODO Auto-generated catch block

eprintStackTrace();

}

try {

if(inBr!=null){

inBrclose();

}

} catch (IOException e) {

// TODO Auto-generated catch block

eprintStackTrace();

}

}

return EnvironmentgetExternalStorageDirectory()getPath();

}

//查看所有的sd路径

public String getSDCardPathEx(){

String mount = new String();

try {

Runtime runtime = RuntimegetRuntime();

Process proc = runtimeexec("mount");

InputStream is = procgetInputStream();

InputStreamReader isr = new InputStreamReader(is);

String line;

BufferedReader br = new BufferedReader(isr);

while ((line = brreadLine()) != null) {

if (linecontains("secure")) continue;

if (linecontains("asec")) continue;

if (linecontains("fat")) {

String columns[] = linesplit(" ");

if (columns != null && columnslength > 1) {

mount = mountconcat("" + columns[1] + "\n");

}

} else if (linecontains("fuse")) {

String columns[] = linesplit(" ");

if (columns != null && columnslength > 1) {

mount = mountconcat(columns[1] + "\n");

}

}

}

} catch (FileNotFoundException e) {

// TODO Auto-generated catch block

eprintStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

eprintStackTrace();

}

return mount;

}

//获取当前路径,可用空间

public static long getAvailableSize(String path){

try{

File base = new File(path);

StatFs stat = new StatFs(basegetPath());

long nAvailableCount = statgetBlockSize() ((long) statgetAvailableBlocks());

return nAvailableCount;

}catch(Exception e){

eprintStackTrace();

}

return 0;

}

以下是Linux系统调用的一个列表,包含了大部分常用系统调用和由系统调用派生出的的函数。这可能是你在互联网上所能看到的唯一一篇中文注释的Linux系统调用列表,即使是简单的字母序英文列表,能做到这么完全也是很罕见的。

按照惯例,这个列表以man pages第2节,即系统调用节为蓝本。按照笔者的理解,对其作了大致的分类,同时也作了一些小小的修改,删去了几个仅供内核使用,不允许用户调用的系统调用,对个别本人稍觉不妥的地方作了一些小的修改,并对所有列出的系统调用附上简要注释。

其中有一些函数的作用完全相同,只是参数不同。(可能很多熟悉C++朋友马上就能联想起函数重载,但是别忘了Linux核心是用C语言写的,所以只能取成不同的函数名)。还有一些函数已经过时,被新的更好的函数所代替了(gcc在链接这些函数时会发出警告),但因为兼容的原因还保留着,这些函数我会在前面标上“”号以示区别。

一、进程控制:

fork 创建一个新进程

clone 按指定条件创建子进程

execve 运行可执行文件

exit 中止进程

_exit 立即中止当前进程

getdtablesize 进程所能打开的最大文件数

getpgid 获取指定进程组标识号

setpgid 设置指定进程组标志号

getpgrp 获取当前进程组标识号

setpgrp 设置当前进程组标志号

getpid 获取进程标识号

getppid 获取父进程标识号

getpriority 获取调度优先级

setpriority 设置调度优先级

modify_ldt 读写进程的本地描述表

nanosleep 使进程睡眠指定的时间

nice 改变分时进程的优先级

pause 挂起进程,等待信号

personality 设置进程运行域

prctl 对进程进行特定 *** 作

ptrace 进程跟踪

sched_get_priority_max 取得静态优先级的上限

sched_get_priority_min 取得静态优先级的下限

sched_getparam 取得进程的调度参数

sched_getscheduler 取得指定进程的调度策略

sched_rr_get_interval 取得按RR算法调度的实时进程的时间片长度

sched_setparam 设置进程的调度参数

sched_setscheduler 设置指定进程的调度策略和参数

sched_yield 进程主动让出处理器,并将自己等候调度队列队尾

vfork 创建一个子进程,以供执行新程序,常与execve等同时使用

wait 等待子进程终止

wait3 参见wait

waitpid 等待指定子进程终止

wait4 参见waitpid

capget 获取进程权限

capset 设置进程权限

getsid 获取会晤标识号

setsid 设置会晤标识号

二、文件系统控制

1、文件读写 *** 作

fcntl 文件控制

open 打开文件

creat 创建新文件

close 关闭文件描述字

read 读文件

write 写文件

readv 从文件读入数据到缓冲数组中

writev 将缓冲数组里的数据写入文件

pread 对文件随机读

pwrite 对文件随机写

lseek 移动文件指针

_llseek 在64位地址空间里移动文件指针

dup 复制已打开的文件描述字

dup2 按指定条件复制文件描述字

flock 文件加/解锁

poll I/O多路转换

truncate 截断文件

ftruncate 参见truncate

umask 设置文件权限掩码

fsync 把文件在内存中的部分写回磁盘

2、文件系统 *** 作

access 确定文件的可存取性

chdir 改变当前工作目录

fchdir 参见chdir

chmod 改变文件方式

fchmod 参见chmod

chown 改变文件的属主或用户组

fchown 参见chown

lchown 参见chown

chroot 改变根目录

stat 取文件状态信息

lstat 参见stat

fstat 参见stat

statfs 取文件系统信息

fstatfs 参见statfs

readdir 读取目录项

getdents 读取目录项

mkdir 创建目录

mknod 创建索引节点

rmdir 删除目录

rename 文件改名

link 创建链接

symlink 创建符号链接

unlink 删除链接

readlink 读符号链接的值

mount 安装文件系统

umount 卸下文件系统

ustat 取文件系统信息

utime 改变文件的访问修改时间

utimes 参见utime

quotactl 控制磁盘配额

三、系统控制

ioctl I/O总控制函数

_sysctl 读/写系统参数

acct 启用或禁止进程记账

getrlimit 获取系统资源上限

setrlimit 设置系统资源上限

getrusage 获取系统资源使用情况

uselib 选择要使用的二进制函数库

ioperm 设置端口I/O权限

iopl 改变进程I/O权限级别

outb 低级端口 *** 作

reboot 重新启动

swapon 打开交换文件和设备

swapoff 关闭交换文件和设备

bdflush 控制bdflush守护进程

sysfs 取核心支持的文件系统类型

sysinfo 取得系统信息

adjtimex 调整系统时钟

alarm 设置进程的闹钟

getitimer 获取计时器值

setitimer 设置计时器值

gettimeofday 取时间和时区

settimeofday 设置时间和时区

stime 设置系统日期和时间

time 取得系统时间

times 取进程运行时间

uname 获取当前UNIX系统的名称、版本和主机等信息

vhangup 挂起当前终端

nfsservctl 对NFS守护进程进行控制

vm86 进入模拟8086模式

create_module 创建可装载的模块项

delete_module 删除可装载的模块项

init_module 初始化模块

query_module 查询模块信息

get_kernel_syms 取得核心符号,已被query_module代替

四、内存管理

brk 改变数据段空间的分配

sbrk 参见brk

mlock 内存页面加锁

munlock 内存页面解锁

mlockall 调用进程所有内存页面加锁

munlockall 调用进程所有内存页面解锁

mmap 映射虚拟内存页

munmap 去除内存页映射

mremap 重新映射虚拟内存地址

msync 将映射内存中的数据写回磁盘

mprotect 设置内存映像保护

getpagesize 获取页面大小

sync 将内存缓冲区数据写回硬盘

cacheflush 将指定缓冲区中的内容写回磁盘

五、网络管理

getdomainname 取域名

setdomainname 设置域名

gethostid 获取主机标识号

sethostid 设置主机标识号

gethostname 获取本主机名称

sethostname 设置主机名称

六、socket控制

socketcall socket系统调用

socket 建立socket

bind 绑定socket到端口

connect 连接远程主机

accept 响应socket连接请求

send 通过socket发送信息

sendto 发送UDP信息

sendmsg 参见send

recv 通过socket接收信息

recvfrom 接收UDP信息

recvmsg 参见recv

listen 监听socket端口

select 对多路同步I/O进行轮询

shutdown 关闭socket上的连接

getsockname 取得本地socket名字

getpeername 获取通信对方的socket名字

getsockopt 取端口设置

setsockopt 设置端口参数

sendfile 在文件或端口间传输数据

socketpair 创建一对已联接的无名socket

七、用户管理

getuid 获取用户标识号

setuid 设置用户标志号

getgid 获取组标识号

setgid 设置组标志号

getegid 获取有效组标识号

setegid 设置有效组标识号

geteuid 获取有效用户标识号

seteuid 设置有效用户标识号

setregid 分别设置真实和有效的的组标识号

setreuid 分别设置真实和有效的用户标识号

getresgid 分别获取真实的,有效的和保存过的组标识号

setresgid 分别设置真实的,有效的和保存过的组标识号

getresuid 分别获取真实的,有效的和保存过的用户标识号

setresuid 分别设置真实的,有效的和保存过的用户标识号

setfsgid 设置文件系统检查时使用的组标识号

setfsuid 设置文件系统检查时使用的用户标识号

getgroups 获取后补组标志清单

setgroups 设置后补组标志清单

八、进程间通信

ipc 进程间通信总控制调用

1、信号

sigaction 设置对指定信号的处理方法

sigprocmask 根据参数对信号集中的信号执行阻塞/解除阻塞等 *** 作

sigpending 为指定的被阻塞信号设置队列

sigsuspend 挂起进程等待特定信号

signal 参见signal

kill 向进程或进程组发信号

sigblock 向被阻塞信号掩码中添加信号,已被sigprocmask代替

siggetmask 取得现有阻塞信号掩码,已被sigprocmask代替

sigsetmask 用给定信号掩码替换现有阻塞信号掩码,已被sigprocmask代替

sigmask 将给定的信号转化为掩码,已被sigprocmask代替

sigpause 作用同sigsuspend,已被sigsuspend代替

sigvec 为兼容BSD而设的信号处理函数,作用类似sigaction

ssetmask ANSI C的信号处理函数,作用类似sigaction

2、消息

msgctl 消息控制 *** 作

msgget 获取消息队列

msgsnd 发消息

msgrcv 取消息

3、管道

pipe 创建管道

4、信号量

semctl 信号量控制

semget 获取一组信号量

semop 信号量 *** 作

5、共享内存

shmctl 控制共享内存

shmget 获取共享内存

shmat 连接共享内存

shmdt 拆卸共享内存

这篇文章主要介绍了Android中查看USB连接的外接设备信息的代码实例,需要的朋友可以参考下

1,USB存储设备(如:U盘,移动硬盘):

//USB存储设备 插拔监听与 SD卡插拔监听一致。

代码如下:

private USBBroadCastReceiver

mBroadcastReceiver;

IntentFilter iFilter = new IntentFilter();

iFilteraddAction(IntentACTION_MEDIA_EJECT);

iFilteraddAction(IntentACTION_MEDIA_MOUNTED);

iFilteraddAction(IntentACTION_MEDIA_REMOVED);

iFilteraddAction(IntentACTION_MEDIA_UNMOUNTED);

iFilteraddDataScheme("file");

mBroadcastReceiver = new

USBBroadCastReceiver();

registerReceiver(mBroadcastReceiver,

iFilter);

private class USBBroadCastReceiver extends BroadcastReceiver {

@Override

public void onReceive(Context context, Intent intent)

{

String action = intentgetAction();

if

(actionequals(IntentACTION_MEDIA_EJECT)) {

//USB设备移除,更新UI

} else if

(actionequals(IntentACTION_MEDIA_MOUNTED)) {

//USB设备挂载,更新UI

}

}

}

//获得挂载的USB设备的存储空间使用情况

public static String getUSBStorage(Context context){

// USB Storage

//storage/udisk为USB设备在Android设备上的挂载路径不同厂商的Android设备路径不同。

//这样写同样适合于SD卡挂载。

File path = new File("/storage/udisk");

StatFs stat = new StatFs(pathgetPath());

long blockSize =

statgetBlockSize();

long totalBlocks = statgetBlockCount();

long availableBlocks = statgetAvailableBlocks();

String usedSize =

FormatterformatFileSize(context, (totalBlocks-availableBlocks)

blockSize);

String availableSize = FormatterformatFileSize(context,

availableBlocks blockSize);

return usedSize + " / " +

availableSize;//空间:已使用/可用的

}

2,USB外接输入设备(如:键盘,鼠标,扫描q)

复制代码

代码如下:

try {

//获得外接USB输入设备的信息

Process p=RuntimegetRuntime()exec("cat

/proc/bus/input/devices");

BufferedReader in = new BufferedReader(new

InputStreamReader(pgetInputStream()));

String line = null;

while((line = inreadLine())!= null){

String deviceInfo =

linetrim();

//对获取的每行的设备信息进行过滤,获得自己想要的。

}

} catch (Exception e) {

// TODO: handle

exception

eprintStackTrace();

}

另:设备信息也可以通过 adb

shell 进入执行 cat /proc/bus/input/devices看到。

USB外接输入设备信息打印如下:

复制代码

代码如下:

I: Bus=0003 Vendor=11c0 Product=0030

Version=0110

N: Name="ACRUX USB Keyboard"

P:

Phys=usb-0000:00:040-13/input1

S:

Sysfs=/devices/pci0000:00/0000:00:040/usb1/1-1/1-13/1-13:11/input/input3

U:

Uniq=

H: Handlers=mouse1 event3

B: PROP=0

B: EV=17

B: KEY=70000 0 0

0 0 0 0 0 0

B: REL=103

B: MSC=10

I: Bus=0003 Vendor=11c0

Product=0030 Version=0110 这行信息会在Android设备与USB设备数据交互的是否使用到。

关于USB外接设备如何与Android设备数据数据交互的代码书写可以参考:

>

表头文件: #include <sys/stath>

#include <unistdh>

定义函数: int stat(const char file_name, struct stat buf);

函数说明: 通过文件名filename获取文件信息,并保存在buf所指的结构体stat中

返回值: 执行成功则返回0,失败返回-1,错误代码存于errno

错误代码:

ENOENT 参数file_name指定的文件不存在

ENOTDIR 路径中的目录存在但却非真正的目录

ELOOP 欲打开的文件有过多符号连接问题,上限为16符号连接

EFAULT 参数buf为无效指针,指向无法存在的内存空间

EACCESS 存取文件时被拒绝

ENOMEM 核心内存不足

ENAMETOOLONG 参数file_name的路径名称太长

#include <sys/stath>

#include <unistdh>

#include <stdioh>

int main() {

struct stat buf;

stat("/etc/hosts", &buf);

printf("/etc/hosts file size = %d\n", bufst_size);

}

-----------------------------------------------------

struct stat {

dev_t st_dev; //文件的设备编号

ino_t st_ino; //节点

mode_t st_mode; //文件的类型和存取的权限

nlink_t st_nlink; //连到该文件的硬连接数目,刚建立的文件值为1

uid_t st_uid; //用户ID

gid_t st_gid; //组ID

dev_t st_rdev; //(设备类型)若此文件为设备文件,则为其设备编号

off_t st_size; //文件字节数(文件大小)

unsigned long st_blksize; //块大小(文件系统的I/O 缓冲区大小)

unsigned long st_blocks; //块数

time_t st_atime; //最后一次访问时间

time_t st_mtime; //最后一次修改时间

time_t st_ctime; //最后一次改变时间(指属性)

};

先前所描述的st_mode 则定义了下列数种情况:

S_IFMT 0170000 文件类型的位遮罩

S_IFSOCK 0140000 scoket

S_IFLNK 0120000 符号连接

S_IFREG 0100000 一般文件

S_IFBLK 0060000 区块装置

S_IFDIR 0040000 目录

S_IFCHR 0020000 字符装置

S_IFIFO 0010000 先进先出

S_ISUID 04000 文件的(set user-id on execution)位

S_ISGID 02000 文件的(set group-id on execution)位

S_ISVTX 01000 文件的sticky位

S_IRUSR(S_IREAD) 00400 文件所有者具可读取权限

S_IWUSR(S_IWRITE)00200 文件所有者具可写入权限

S_IXUSR(S_IEXEC) 00100 文件所有者具可执行权限

S_IRGRP 00040 用户组具可读取权限

S_IWGRP 00020 用户组具可写入权限

S_IXGRP 00010 用户组具可执行权限

S_IROTH 00004 其他用户具可读取权限

S_IWOTH 00002 其他用户具可写入权限

S_IXOTH 00001 其他用户具可执行权限

上述的文件类型在POSIX中定义了检查这些类型的宏定义:

S_ISLNK (st_mode) 判断是否为符号连接

S_ISREG (st_mode) 是否为一般文件

S_ISDIR (st_mode) 是否为目录

S_ISCHR (st_mode) 是否为字符装置文件

S_ISBLK (s3e) 是否为先进先出

S_ISSOCK (st_mode) 是否为socket

若一目录具有sticky位(S_ISVTX),则表示在此目录下的文件只能被该文件所有者、此目录所有者或root来删除或改名。

-----------------------------------------------------

struct statfs {

long f_type; //文件系统类型

long f_bsize; //块大小

long f_blocks; //块多少

long f_bfree; //空闲的块

long f_bavail; //可用块

long f_files; //总文件节点

long f_ffree; //空闲文件节点

fsid_t f_fsid; //文件系统id

long f_namelen; //文件名的最大长度

long f_spare[6]; //spare for later

};

stat、fstat和lstat函数(UNIX)

#include<sys/typesh>

#include<sys/stath>

int stat(const char restrict pathname, struct stat restrict buf);

提供文件名字,获取文件对应属性。感觉一般是文件没有打开的时候这样 *** 作。

int fstat(int filedes, struct stat buf);

通过文件描述符获取文件对应的属性。文件打开后这样 *** 作

int lstat(const char restrict pathname, struct stat restrict buf);

连接文件

三个函数的返回:若成功则为0,若出错则为-1

给定一个pathname,stat函数返回一个与此命名文件有关的信息结构,fstat函数获得已在描述符filedes上打开的文件的有关信息。lstat函数类似于stat,但是当命名的文件是一个符号连接时,lstat返回该符号连接的有关信息,而不是由该符号连接引用的文件的信息。

第二个参数是个指针,它指向一个我们应提供的结构。这些函数填写由buf指向的结构。该结构的实际定义可能随实现而有所不同,但其基本形式是:

struct stat{

mode_t st_mode; /file tpye &mode (permissions)/

ino_t st_ino; /i=node number (serial number)/

dev_t st_rdev; /device number for special files/

nlink_t st_nlink; /number of links/

uid_t st_uid; /user id of owner/

gid_t st_gid; /group ID of owner/

off_t st_size; /size in bytes for regular files/

time_t st_atime; /time of last access/

time_t st_mtime; /time of last modification/

time_t st_ctime; /time of last file status change/

long st_blksize; /best I/O block size /

long st_blocks; /number of 512-byte blocks allocated/

};

注意,除最后两个以外,其他各成员都为基本系统数据类型。我们将说明此结构的每个成员以了解文件属性。

使用stat函数最多的可能是ls-l命令,用其可以获得有关一个文件的所有信息。

1 函数都是获取文件(普通文件,目录,管道,socket,字符,块()的属性。

函数原型

#include <sys/stath>

int stat(const char restrict pathname, struct stat restrict buf);

提供文件名字,获取文件对应属性。

int fstat(int filedes, struct stat buf);

通过文件描述符获取文件对应的属性。

int lstat(const char restrict pathname, struct stat restrict buf);

连接文件描述命,获取文件属性。

2 文件对应的属性

struct stat {

mode_t st_mode; //文件对应的模式,文件,目录等

ino_t st_ino; //inode节点号

dev_t st_dev; //设备号码

dev_t st_rdev; //特殊设备号码

nlink_t st_nlink; //文件的连接数

uid_t st_uid; //文件所有者

gid_t st_gid; //文件所有者对应的组

off_t st_size; //普通文件,对应的文件字节数

time_t st_atime; //文件最后被访问的时间

time_t st_mtime; //文件内容最后被修改的时间

time_t st_ctime; //文件状态改变时间

blksize_t st_blksize; //文件内容对应的块大小

blkcnt_t st_blocks; //伟建内容对应的块数量

};

可以通过上面提供的函数,返回一个结构体,保存着文件的信息。

以上就是关于Android获取系统cpu信息,内存,版本,电量等信息全部的内容,包括:Android获取系统cpu信息,内存,版本,电量等信息、如何正确获得Android内外SD卡路径、怎样查询linux系统调用函数等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9504209.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存