add directory study
This commit is contained in:
71
study/linux-travel/MINIX-1.5/1.5/Source/commands/size.c
Normal file
71
study/linux-travel/MINIX-1.5/1.5/Source/commands/size.c
Normal file
@@ -0,0 +1,71 @@
|
||||
/* size - tell size of an object file Author: Andy Tanenbaum */
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <fcntl.h>
|
||||
|
||||
#define HLONG 8 /* # longs in the header */
|
||||
#define TEXT 2
|
||||
#define DATA 3
|
||||
#define BSS 4
|
||||
#define CHMEM 6
|
||||
#define MAGIC 0x0301 /* magic number for an object file */
|
||||
#define SEPBIT 0x00200000 /* this bit is set for separate I/D */
|
||||
|
||||
int heading; /* set when heading printed */
|
||||
int error;
|
||||
|
||||
main(argc, argv)
|
||||
int argc;
|
||||
char *argv[];
|
||||
{
|
||||
int i;
|
||||
|
||||
if (argc == 1) {
|
||||
size("a.out");
|
||||
exit(error);
|
||||
}
|
||||
for (i = 1; i < argc; i++) size(argv[i]);
|
||||
exit(error);
|
||||
}
|
||||
|
||||
|
||||
|
||||
size(name)
|
||||
char *name;
|
||||
{
|
||||
int fd, separate;
|
||||
long head[HLONG], dynam, allmem;
|
||||
|
||||
if ((fd = open(name, O_RDONLY)) < 0) {
|
||||
stderr3("size: can't open ", name, "\n");
|
||||
return;
|
||||
}
|
||||
if (read(fd, head, sizeof(head)) != sizeof(head)) {
|
||||
stderr3("size: ", name, ": header too short\n");
|
||||
error = 1;
|
||||
close(fd);
|
||||
return;
|
||||
}
|
||||
if ((head[0] & 0xFFFFL) != MAGIC) {
|
||||
stderr3("size: ", name, " not an object file\n");
|
||||
close(fd);
|
||||
return;
|
||||
}
|
||||
separate = (head[0] & SEPBIT ? 1 : 0);
|
||||
dynam = head[CHMEM] - head[TEXT] - head[DATA] - head[BSS];
|
||||
if (separate) dynam += head[TEXT];
|
||||
allmem = (separate ? head[CHMEM] + head[TEXT] : head[CHMEM]);
|
||||
if (heading++ == 0) prints(" text\t data\t bss\t stack\tmemory\n");
|
||||
printf("%6ld\t%6ld\t%6ld\t%6ld\t%6ld\t%s\n",
|
||||
head[TEXT], head[DATA], head[BSS], dynam, allmem, name);
|
||||
close(fd);
|
||||
}
|
||||
|
||||
stderr3(s1, s2, s3)
|
||||
char *s1, *s2, *s3;
|
||||
{
|
||||
std_err(s1);
|
||||
std_err(s2);
|
||||
std_err(s3);
|
||||
error = 1;
|
||||
}
|
||||
Reference in New Issue
Block a user