|
我在visual stdio 2010下實(shí)驗(yàn)的文件操作函數(shù),linux中對文件和目錄的操作都等同于文件的操作。
linux文件主要分為四種:普通文件,目錄文件,連接文件,和設(shè)備文件。
linux中對所有文件的操作都是基于一個(gè)非負(fù)數(shù)的文件描述符進(jìn)行的。
當(dāng)打開一個(gè)文件或創(chuàng)建一個(gè)新文件時(shí),內(nèi)核就向進(jìn)程返回一個(gè)文件描述符;當(dāng)讀寫文件時(shí),把文件描述符作為參數(shù)傳遞給相應(yīng)的函數(shù)。
學(xué)習(xí)的過程是一個(gè)不斷否定的過程,最初看到linux中使用fopen函數(shù)達(dá)到對設(shè)備文件的調(diào)用,就像在mini2440開發(fā)板中,應(yīng)用層led閃爍程序?qū)︱?qū)動(dòng)層驅(qū)動(dòng)文件調(diào)用時(shí)使用如下格式:
/*打開/dev/leds 設(shè)備文件*/
fd = open("/dev/leds0", 0);
劉翔對此百思不得其解,在windows下編程fprintf函數(shù)只是普通的格式化文件輸出函數(shù)。是否在linux中每個(gè)文件都會(huì)有單獨(dú)的主函數(shù),調(diào)用fprintf時(shí),會(huì)用對應(yīng)的參數(shù)傳達(dá)到主函數(shù)。答案是否定,因?yàn)槲也]有在驅(qū)動(dòng)文件中發(fā)現(xiàn)主函數(shù)的存在。linux和window下編程應(yīng)該有著微妙的差別,于是劉翔開始了他的探索之路,期待linux嵌入式開發(fā)同行愛好者的一同進(jìn)步,由于所有的知識點(diǎn)沒有專業(yè)老師解答,所以都是自己看N多本書和不對實(shí)驗(yàn)的總結(jié),見效之處請?jiān)彙?br />
// vs1.cpp : 定義控制臺(tái)應(yīng)用程序的入口點(diǎn)。
//文件實(shí)驗(yàn),linux驅(qū)動(dòng)調(diào)用的文件調(diào)用思想
//劉翔 2012年1月23日,祝有所收獲
//實(shí)驗(yàn)成功fopen,fclose函數(shù)
//實(shí)驗(yàn)成功gets,puts函數(shù)
//實(shí)驗(yàn)成功fputs,fgets函數(shù)
#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;
}
|
|