标题: ARM LINUX嵌入式学习的一点感悟 [打印本页]

作者: heicc    时间: 2015-1-5 16:31
标题: ARM LINUX嵌入式学习的一点感悟
我在visual stdio 2010下实验的文件操作函数,linux中对文件和目录的操作都等同于文件的操作。
linux文件主要分为四种:普通文件,目录文件,连接文件,和设备文件。
linux中对所有文件的操作都是基于一个非负数的文件描述符进行的。
当打开一个文件或创建一个新文件时,内核就向进程返回一个文件描述符;当读写文件时,把文件描述符作为参数传递给相应的函数。

学习的过程是一个不断否定的过程,最初看到linux中使用fopen函数达到对设备文件的调用,就像在mini2440开发板中,应用层led闪烁程序对驱动层驱动文件调用时使用如下格式:
/*打开/dev/leds 设备文件*/
fd = open("/dev/leds0", 0);

刘翔对此百思不得其解,在windows下编程fprintf函数只是普通的格式化文件输出函数。是否在linux中每个文件都会有单独的主函数,调用fprintf时,会用对应的参数传达到主函数。答案是否定,因为我并没有在驱动文件中发现主函数的存在。linux和window下编程应该有着微妙的差别,于是刘翔开始了他的探索之路,期待linux嵌入式开发同行爱好者的一同进步,由于所有的知识点没有专业老师解答,所以都是自己看N多本书和不对实验的总结,见效之处请原谅。

// vs1.cpp : 定义控制台应用程序的入口点。
//文件实验,linux驱动调用的文件调用思想
//刘翔 2012年1月23日,祝有所收获
//实验成功fopen,fclose函数
//实验成功gets,puts函数
//实验成功fputs,fgets函数


#include "stdafx.h"

typedef unsigned char uchar;
typedef unsigned short ushort;
typedef unsigned int uint;
typedef unsigned long ulong;

int _tmain(int argc, _TCHAR* argv[])
{        char i,buf[13];
        int j,k;
        FILE *fp;
        fp=fopen("file.cpp","w+");
        if(fp)
                        {//fputs("hollo world!",fp);//向文件输出字符串
                        j=10;
                        k=100;
                        fprintf(fp,"%d,%d",j,k);
                        fclose(fp);
                        }
        else return NULL;
        fp=fopen("file.cpp","r+");
        if(fp)
                        {//fgets(buf,12,fp);//从文件读出字符串
                        j=100;
                        k=10;
                        fscanf(fp,"%d,%d",&j,&k);
                        printf("%d,%d",j,k);
                        fclose(fp);
                        }
        else return NULL;
        //for(i=0;i<12;i++)printf("%c",buf[ i]);
        //puts(buf);
        //gets(buf);//从终端输入字符串
        //puts(buf);//从中断输出字符串
        return 0;
}







欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1