2011.10.10 Evo Yang
ARM嵌入式linux复习心得总结2:
一、文件编程综合实验—文件拷贝
这里的文件拷贝实验是在昨天创建文件的基础之上的综合练习,由于是Linux应用编程的基础所以要求要非常的熟练,而文件拷贝更是重点中的综合应用,因此详细分析一下如何使用库函数,实现文件copy的功能。同样使用Vmware虚拟机Linux环境使用vi编辑器创建file_cp.c文件输入代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<strings.h>
#define BUFFER_SIZE 1024 //定义buffer的空间长度
Int main(int argc,char *argv[])
{
FILE *from_file; //定义一个FILE类型的变量方便以后对文件的操作
FILE *to_file;
long file_len = 0; //记录文件大小作为数据传送的指标
char buffer[BUFFER_SIZE] //定义一个字符数据存储空间大小为BUFFER_SIZE
char *ptr;
if(argc! = 3) //argc表示字符串数量,这里一共应该有3个字符串(命令字符)故首先判断用户使用的命令是否正确(这个if语句常在Linux编程中出现,而且位置都差不多,因此最好将他记住便于后期编程使用)
{
Printf(“Usage:%s fromfile tofile\n”,argv[0]);\
Exit(1); //切记‘1’是出错返回
}
If((from_file = fopen(argv[1],”rb”))==NULL) //打开from_file文件,并将地址赋给from_file判断是否打开成功
{
Printf(“open %s error”,argv[2]);
Exit(1);
}
If((to_file=(argv[2],”wd”)) == NULL) //同上
{
Printf(“open %s error”,argv[2]);
Exit(1);
}
/*测的文件大小*/
Fseek(from_file,0L,SEEK_END);
File_len = ftell(from_file);
Fseek(from_file,0L,SEEK_SET);
Printf(“from file size is %d\n”,file_len);
/*文件拷贝!*/
While(!feof(from_file))
{
Fread(buffer,BUFFER_SIZE,1,from_file);
If(BUFFER_SIZE>=file_len)
{
Fwirte(buffer,file_len,1,to_file);
}
Else
{
Fwrite(buffer,BUFFER_SIZE,1,to_file);
File_len = file_len – BUFFER_SIZE;
}
Bzero(buffer,BUFFER_SIZE); //置字节字符串buffer的前BUFFER_SIZE个字节为零且包括‘\0’。
}
Fclose(from_file);//关闭文件
Fclose(to_file);
Exit(0);
}
注:
Bzero 用法(摘自百度百科http://baike.baidu.com/view/1026871.htm 这个解释比较清楚明了)
原型:extern void bzero(void *s, int n);
用法:#include <string.h>
功能:置字节字符串s的前n个字节为零且包括‘\0’。
说明:bzero无返回值。
举例:
// bzero.c
/* bzero函数TC和VC中都没有,gcc中提供了 */
#include <stdio.h>
#include <string.h>
int main( void )
{
struct
{
int a;
char s[5];
float f;
} tt;
char s[20];
bzero( &tt, sizeof( tt ) );
bzero( s, 20 );
printf( "Initial success." );
getchar();
return 0;
}
总结:文件的编程作为Linux系统编程的基础,一定要熟练的运用,在此推荐着重熟练编程file_copy综合性较强
二、时间编程
获取本地时间是Linux系统编程非常重要的一部分,为什么说他重要,我个人认为他编程的时候会经常用到,不管是应用程序还是系统模块,因此这里要着重学习一下Linux时间编程,建立time.c
#include<time.h>
#include<stdio.h>
Int main(void)
{
Struct tm *ptr;
Time_t it;
It = time(NULL); //获取日历时间
Ptr = localtime(&it); //转化为本地时间
Printf(“%s\n”,asctime(ptr)); //使用asctime获取时间并打印
Printf(“%s”,ctime(&it)); //使用ctime获取时间并打印
Return 0 ;
}
三、总结:把握好Linux编程的基础行学习!!今天总的来说复习了好多,但着重的还是这几个编程例子,有些悲剧的是samba服务又不好用了所以又忙活了一阵,这个功能虽说很好用但自从安了Vmtools后就不怎么依赖了,现在主要是注重宿主机的联通性,以为自己现在做的一个实验就是使用NFS联通arm开发板使用局域网加载文件系统然后启动所以网络如果不好用了那就真的啥也不用干了...