2010-08-29 4 views
0

Je reçoisEst-ce que le code fonctionnera avec NO jailbreak iphone?

collect2: ld retourné 1 état de sortie usr/bin/g ++ 4.2 a échoué avec le code de sortie 1

 #import <stdio.h> 
#import <string.h> 
#import <mach/mach_host.h> 
#import <sys/sysctl.h> 

#include <CoreFoundation/CoreFoundation.h> 
#include <IOKit/ps/IOPowerSources.h> 
#include <IOKit/ps/IOPSKeys.h> 

#include <assert.h> 
#include <errno.h> 
#include <stdlib.h> 
#include <string.h> 
#include <syslog.h> 

void printMemoryInfo() 
{ 
size_t length; 
int mib[6]; 
int result; 

printf("Memory Info\n"); 
printf("-----------\n"); 

int pagesize; 
mib[0] = CTL_HW; 
mib[1] = HW_PAGESIZE; 
length = sizeof(pagesize); 
if (sysctl(mib, 2, &pagesize, &length, NULL, 0) < 0) 
{ 
perror("getting page size"); 
} 
printf("Page size = %d bytes\n", pagesize); 
printf("\n"); 

mach_msg_type_number_t count = HOST_VM_INFO_COUNT; 

vm_statistics_data_t vmstat; 
if (host_statistics(mach_host_self(), HOST_VM_INFO, (host_info_t)&vmstat, &count) != KERN_SUCCESS) 
{ 
printf("Failed to get VM statistics."); 
} 

double total = vmstat.wire_count + vmstat.active_count + vmstat.inactive_count + vmstat.free_count; 
double wired = vmstat.wire_count/total; 
double active = vmstat.active_count/total; 
double inactive = vmstat.inactive_count/total; 
double free = vmstat.free_count/total; 

printf("Total = %8d pages\n", vmstat.wire_count + vmstat.active_count + vmstat.inactive_count + vmstat.free_count); 
printf("\n"); 
printf("Wired = %8d bytes\n", vmstat.wire_count * pagesize); 
printf("Active = %8d bytes\n", vmstat.active_count * pagesize); 
printf("Inactive = %8d bytes\n", vmstat.inactive_count * pagesize); 
printf("Free = %8d bytes\n", vmstat.free_count * pagesize); 
printf("\n"); 
printf("Total = %8d bytes\n", (vmstat.wire_count + vmstat.active_count + vmstat.inactive_count + vmstat.free_count) * pagesize); 
printf("\n"); 
printf("Wired = %0.2f %%\n", wired * 100.0); 
printf("Active = %0.2f %%\n", active * 100.0); 
printf("Inactive = %0.2f %%\n", inactive * 100.0); 
printf("Free = %0.2f %%\n", free * 100.0); 
printf("\n"); 

mib[0] = CTL_HW; 
mib[1] = HW_PHYSMEM; 
length = sizeof(result); 
if (sysctl(mib, 2, &result, &length, NULL, 0) < 0) 
{ 
perror("getting physical memory"); 
} 
printf("Physical memory = %8d bytes\n", result); 
mib[0] = CTL_HW; 
mib[1] = HW_USERMEM; 
length = sizeof(result); 
if (sysctl(mib, 2, &result, &length, NULL, 0) < 0) 
{ 
perror("getting user memory"); 
} 
printf("User memory = %8d bytes\n", result); 
printf("\n"); 
} 

void printProcessorInfo() 
{ 
size_t length; 
int mib[6]; 
int result; 

printf("Processor Info\n"); 
printf("--------------\n"); 

mib[0] = CTL_HW; 
mib[1] = HW_CPU_FREQ; 
length = sizeof(result); 
if (sysctl(mib, 2, &result, &length, NULL, 0) < 0) 
{ 
perror("getting cpu frequency"); 
} 
printf("CPU Frequency = %d hz\n", result); 

mib[0] = CTL_HW; 
mib[1] = HW_BUS_FREQ; 
length = sizeof(result); 
if (sysctl(mib, 2, &result, &length, NULL, 0) < 0) 
{ 
perror("getting bus frequency"); 
} 
printf("Bus Frequency = %d hz\n", result); 
printf("\n"); 
} 

int printBatteryInfo() 
{ 
CFTypeRef blob = IOPSCopyPowerSourcesInfo(); 
CFArrayRef sources = IOPSCopyPowerSourcesList(blob); 

CFDictionaryRef pSource = NULL; 
const void *psValue; 

int numOfSources = CFArrayGetCount(sources); 
if (numOfSources == 0) { 
perror("Error getting battery info"); 
return 1; 
} 

printf("Battery Info\n"); 
printf("------------\n"); 

for (int i = 0 ; i < numOfSources ; i++) 
{ 
pSource = IOPSGetPowerSourceDescription(blob, CFArrayGetValueAtIndex(sources, i)); 
if (!pSource) { 
perror("Error getting battery info"); 
return 2; 
} 
psValue = (CFStringRef)CFDictionaryGetValue(pSource, CFSTR(kIOPSNameKey)); 

int curCapacity = 0; 
int maxCapacity = 0; 
int percent; 

psValue = CFDictionaryGetValue(pSource, CFSTR(kIOPSCurrentCapacityKey)); 
CFNumberGetValue((CFNumberRef)psValue, kCFNumberSInt32Type, &curCapacity); 

psValue = CFDictionaryGetValue(pSource, CFSTR(kIOPSMaxCapacityKey)); 
CFNumberGetValue((CFNumberRef)psValue, kCFNumberSInt32Type, &maxCapacity); 

percent = (int)((double)curCapacity/(double)maxCapacity * 100); 

printf ("powerSource %d of %d: percent: %d/%d = %d%%\n", i+1, CFArrayGetCount(sources), curCapacity, maxCapacity, percent); 
printf("\n"); 

} 

} 

int printProcessInfo() { 
int mib[5]; 
struct kinfo_proc *procs = NULL, *newprocs; 
int i, st, nprocs; 
size_t miblen, size; 

/* Set up sysctl MIB */ 
mib[0] = CTL_KERN; 
mib[1] = KERN_PROC; 
mib[2] = KERN_PROC_ALL; 
mib[3] = 0; 
miblen = 4; 

/* Get initial sizing */ 
st = sysctl(mib, miblen, NULL, &size, NULL, 0); 

/* Repeat until we get them all ... */ 
do { 
/* Room to grow */ 
size += size/10; 
newprocs = realloc(procs, size); 
if (!newprocs) { 
if (procs) { 
free(procs); 
} 
perror("Error: realloc failed."); 
return (0); 
} 
procs = newprocs; 
st = sysctl(mib, miblen, procs, &size, NULL, 0); 
} while (st == -1 && errno == ENOMEM); 

if (st != 0) { 
perror("Error: sysctl(KERN_PROC) failed."); 
return (0); 
} 

/* Do we match the kernel? */ 
assert(size % sizeof(struct kinfo_proc) == 0); 

nprocs = size/sizeof(struct kinfo_proc); 

if (!nprocs) { 
perror("Error: printProcessInfo."); 
return(0); 
} 
printf(" PID\tName\n"); 
printf("-----\t--------------\n"); 
for (i = nprocs-1; i >=0; i--) { 
printf("%5d\t%s\n",(int)procs[i].kp_proc.p_pid, procs[i].kp_proc.p_comm); 
} 
free(procs); 
return (0); 
} 

int main(int argc, char **argv) 
{ 
printf("iPhone Hardware Info\n"); 
printf("====================\n"); 
printf("\n"); 

printMemoryInfo(); 
printProcessorInfo(); 
printBatteryInfo(); 
printProcessInfo(); 
return (0); 
     } 

Répondre

0

Non L'iPhone SDK ne comprend pas IOKit dans le cadre du défaut chemin de recherche d'en-tête, il est donc peu probable qu'une application qui l'utilise soit approuvée pour l'App Store. (Il fonctionne dans le simulateur si vous trouvez et liez IOKit manuellement, mais une tentative de 30 secondes pour le compiler pour un périphérique a échoué)

Questions connexes