所谓“文件”是指一组相关数据的有序集合。 这个数据集有一个名称,叫做文件名。 实际上在前面的各章中我们已经多次使用了文件,例如源程序文件、目标文件、可执行文件、库文件 (头文件)等。文件通常是驻留在外部介质(如磁盘等)上的, 在使用时才调入内存中来。从不同的角度可对文件作不同的分类。从用户的角度看,文件可分为普通文件和设备文件两种。
普通文件是指驻留在磁盘或其它外部介质上的一个有序数据集,可以是源文件、目标文件、可执行程序; 也可以是一组待输入处理的原始数据,或者是一组输出的结果。对于源文件、目标文件、可执行程序可以称作程序文件,对输入输出数据可称作数据文件。
设备文件是指与主机相联的各种外部设备,如显示器、打印机、键盘等。在操作系统中,把外部设备也看作是一个文件来进行管理,把它们的输入、输出等同于对磁盘文件的读和写。通常把显示器定义为标准输出文件, 一般情况下在屏幕上显示有关信息就是向标准输出文件输出。如前面经常使用的printf,putchar 函数就是这类输出。键盘通常被指定标准的输入文件, 从键盘上输入就意味着从标准输入文件上输入数据。scanf,getchar函数就属于这类输入。&nb ......
编译Native C的hello,world模块
Android 编译环境本身比较复杂,且不像普通的编译环境:只有顶层目录下才有Makefile文件,而其他的每个component都使用统一标准的 Android.mk. Android.mk文件本身是比较简单的,不过它并不是我们熟悉的Makefile,而是经过了Android自身编译系统的很多处理,因此要真正理清楚其中的联系还比较复杂,不过这种方式的好处在于,编写一个新的Android.mk来给Android增加一个新的Component会比较简单。编译Java程序可以直接采用Eclipse的集成环境来完成,这里就不重复了。我们主要针对C/C++来说明,下面通过一个小例子来说明,如何在Android 中增加一个C程序的Hello World:
1. 在$(YOUR_ANDROID)/development目录下创建hello目录,其中$(YOUR_ANDROID)指Android源代码所在的目录。
$ mkdir $(YOUR_ANDROID)/development/hello
2. 在$(YOUR_ANDROID)/development/hello/目录编写hello.c文件,hello.c的内容当然就是经典的HelloWorld程序:
#include <stdio.h>
int main()
{
printf("Hello World!\n");
return 0;
}
3.在$(YOUR_ANDROID)/development/hello/目录编写A ......
clock()返回clock_t类型;
在time.h头文件中,定义了 typedef long clock_t
clock()是用来计算两个时间点之间的时间间隔。如下程序:
#include <stdio.h>
int main()
{
int i = 0;
clock_t start_time, end_time;
start_time = clock(); //开始计时, start_time = 0
while(i < 10000000)
i++;
end_time = clock();
printf("from 0 to 10000000 empty loops: %d (ms)\n", end_time - start_time);
return 0;
}
ps:把int i = 0;放在clock_t start_time, end_time;之后就会出现错误(在vc 6.0编译环境下)
time_t
time()用来得到系统当前的时间,是从1970年1月1号0时0分0秒开始计算的秒数
在time.h头文件中,定义了typedef long time_t
time_t可以通过gmtime(const time_t *timeptr), localtime(const time_t* timeptr)转成struct tm*格式
tm的定义如下:
struct tm {
int tm_sec; /* 秒 – 取值区间为[0,59] */
int tm_min;& ......
clock()返回clock_t类型;
在time.h头文件中,定义了 typedef long clock_t
clock()是用来计算两个时间点之间的时间间隔。如下程序:
#include <stdio.h>
int main()
{
int i = 0;
clock_t start_time, end_time;
start_time = clock(); //开始计时, start_time = 0
while(i < 10000000)
i++;
end_time = clock();
printf("from 0 to 10000000 empty loops: %d (ms)\n", end_time - start_time);
return 0;
}
ps:把int i = 0;放在clock_t start_time, end_time;之后就会出现错误(在vc 6.0编译环境下)
time_t
time()用来得到系统当前的时间,是从1970年1月1号0时0分0秒开始计算的秒数
在time.h头文件中,定义了typedef long time_t
time_t可以通过gmtime(const time_t *timeptr), localtime(const time_t* timeptr)转成struct tm*格式
tm的定义如下:
struct tm {
int tm_sec; /* 秒 – 取值区间为[0,59] */
int tm_min;& ......
好久没上来了...有点对不起自己的良心...
话说这段时间快给这个函数搞死了...
我找找...我找我找...我就是要把它给搞明白了...
话说前段时间那个死人四则运算也把自己搞得半死了...额...现在还在停工状态...晕死....
再说scanf(),上网是可以找到些东西....但是都不怎么明白...打算自己搞明白了再上来写个详细点的吧...
我一定要把它给找出来....下资源去...
总算翻了下CSDN找到了...有意思...果然很快就解决了...不过疑惑还没完全解决....再去看多点这个函数的帖子....
PS今晚的代码:
printf("?\t");
scanf("%f",&num);
while(num != -1)
{
if(num == -1)
{
break;
}
else
{
printf ......
exercise2.4
void squeeze(char s[],char t[])
{
int i,j,k;
int lens,lent;
lens=strlen(s);
lent=strlen(t);
for(i=0,k=0;i<lens;i++)
{
for(j=0;j<lent;j++)
if(s[i]==t[j])
break;
if(j==lent)
s[k++]=s[i];
}
s[k]='\0';
}
exercise2.5
int any(char s[],char t[])
{
int i,j;
for(i=0;s[i]!='\0';i++)
for(j=0;t[j]!='\0';j++)
if(s[i]==t[j])
return i;
return -1;
}
exercise2.9
int bitcount(unsigned x)
{
int b;
b=0;
while(x)
{
x&=(x-1);
b++;
}
return b;
}
exercise2.10
int lower(int c)
{
return (c>='A'&&c<='Z')?c+'a'-'A':c;
} ......
c运行库malloc分配的内存在哪里呢,首先上代码:
//内存大小连接器将其地址指向-heap选项
extern _DATA_ACCESS int _SYSMEM_SIZE;
//内存区域
#pragma DATA_SECTION(_sys_memory, ".sysmem")
far PACKET _sys_memory[1] = { ((size_t)&_SYSMEM_SIZE) - sizeof(PACKET), 0 };
在bios设置里面,system--->mem->property->general, segment for malloc() / free(), 设置成SDRAM; 在bios设置里面,system--->mem->property->general, segment for malloc() / free(), 设置成SDRAM;意思是实现标准C的malloc/free等函数(如MEM_alloc)来申请和释放内存。参考spru403q.pdf,page269 ......