我在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;
}
|