Ⅰ 用標准c讀取某bmp文件的長寬及象素等信息需要哪些函數
我只要抄一個頭文件吧。
bmp文件存襲貯形式為前14個位元組為文件信息區,保存的是BMP文件類型標識2,文件長度4,保留位元組4,文件描述區長度4,(其中16色點陣圖值為118,256色點陣圖為1078)。
之後40個位元組是圖像信息區,為圖形尺寸4,圖形寬度4,圖形高度4,其他就不多說了,你可看下關於BMP文件的說明。
因此讀取長寬只要從文件頭偏移18位元組就行。
#include <stdio.h>
main(){
long bmpwidth,bmpheight;
FILE *fp;
fp=fopen("FIVEANGL.bmp","rb");
fseek(fp,18L,SEEK_SET);
fread(&bmpwidth,4,1,fp);
fread(&bmpheight,4,1,fp);
fclose(fp);
printf("\n%s width is %ld,height is %ld","FIVEANGL.bmp",bmpwidth,bmpheight);
getchar();
}
Ⅱ C語言文件的編譯與執行的四個階段並分別描述
開發C程序有四個步驟:編輯、編譯、連接和運行。
任何一個體系結構處理器上都可以使用語言程序,只要該體系結構處理器有相應的C語言編譯器和庫,那麼C源代碼就可以編譯並連接到目標二進制文件上運行。
1、預處理:導入源程序並保存(C文件)。
2、編譯:將源程序轉換為目標文件(Obj文件)。
3、鏈接:將目標文件生成為可執行文件(EXE文件)。
4、運行:執行,獲取運行結果的EXE文件。
(2)c獲取文件描述擴展閱讀:
將C語言代碼分為程序的幾個階段:
1、首先,源代碼文件測試。以及相關的頭文件,比如stdio。H、由預處理器CPP預處理為.I文件。預編譯的。文件不包含任何宏定義,因為所有宏都已展開,並且包含的文件已插入。我歸檔。
2、編譯過程是對預處理文件進行詞法分析、語法分析、語義分析和優化,生成相應的匯編代碼文件。這個過程往往是整個程序的核心部分,也是最復雜的部分之一。
3、匯編程序不直接輸出可執行文件,而是輸出目標文件。匯編程序可以調用LD來生成可以運行的可執行程序。也就是說,您需要鏈接大量的文件才能獲得「a.out」,即最終的可執行文件。
4、在鏈接過程中,需要重新調整其他目標文件中定義的函數調用指令,而其他目標文件中定義的變數也存在同樣的問題。
Ⅲ 求標准C語言讀寫文件的源代碼
/****************************************
程序功能:讀取c:\source.txt文件的內容,
取其中'#'開頭行的內容寫入c:\dest.txt中。
如:source.txt文件內容為如下:
#jksfjlsd
12jlkdjfsl
#jfiejw
#jkfldsl
iejfja;fj
則程序會產生一個dest.txt文件內容如下:
#jksfjlsd
#jfiejw
#jkfldsl
****************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
FILE *fp1;
FILE *fp2; //申明2個文件指針,一個打開源文件,一個打開目標文件
char buf[1024]; //申明一個大字元數組,用於保存文件每一個行的內容
//只讀方式打開源文件,這里得用兩個反斜杠轉義字元
if( (fp1=fopen("c:\\source.txt","r"))==NULL )
{
printf("打開source.txt失敗,可能文件還沒有創建!");
exit(0);
}
//創建目標文件,這里一般不會發生錯誤
if( (fp2=fopen("c:\\dest.txt","w"))==NULL )
{
printf("創建dest.txt失敗!");
fclose(fp1);
exit(0);
}
while(!feof(fp1)) //當文件指針fp1指向文件末尾時,feof返回0,否則返回1,該句作用是只要未到末尾則進入循環
{
memset(buf, 0, 1024); //buf字元串清0
fgets(buf, 1024, fp1); //從fp1文件當前指針讀取一行內容到buf
if(buf[0]=='#') //判斷該行的第一個字元是否為'#'
{
fputs(buf, fp2); //是'#',寫內容到fp2文件
}
}
fclose(fp1);
fclose(fp2); //循環結束,關閉fp1,fp2文件,程序結束
return 0;
}
Ⅳ 我要用c編寫程序讀寫磁碟,在linux中磁碟為文件,怎樣用c語言獲取磁碟的文件描述符,然後對磁碟進行讀寫
linux下面的概念是一切皆文件。所以沒有像c盤d盤這樣的東西,有的只是各種各樣的文件專夾和文件。要讀屬一個linux下面的文件很簡單,命令pwd可以得到當前路徑,然後路徑接上你打開的文件名就可以知道這個文件的詳細路徑了。直接open就可以了。
Ⅳ 求關於C單片機語言頭文件的描述
一些初學C語言的人,不知道頭文件(*.h文件)原來還可以自己寫的。只知道調用系統庫函數時,要使用#i nclude語句將某些頭文件包含進去。其實,頭文件跟.C文件一樣,是可以自己寫的。頭文件是一種文本文件,使用文本編輯器將代碼編寫好之後,以擴展名.h保存就行了。頭文件中一般放一些重復使用的代碼,例如函數聲明,變數聲明,常數定義,宏的定義等等。當使用#i nclude語句將頭文件引用時,相當於將頭文件中所有內容,復制到#i nclude處。為了避免因為重復引用而導致的編譯錯誤,頭文件常具有 #ifndef LABEL
#define LABEL
//代碼部分
#endif
的格式。其中,LABEL為一個唯一的標號,命名規則跟變數的命名規則一樣。常根據它所在的頭文件名來命名,例如,如果頭文件的文件名叫做hardware.h,那麼可以這樣使用:
#ifndef __HARDWARE_H__
#define __HARDWARE_H__
//代碼部分
#endif
這樣寫的意思就是,如果沒有定義__HARDWARE_H__,則定義__HARDWARE_H__,並編譯下面的代碼部分,直到遇到#endif。這樣,當重復引用時,由於__HARDWARE_H__已經被定義,則下面的代碼部分就不會被編譯了,這樣就避免了重復定義。
另外一個地方就是使用include時,使用引號與尖括弧的意思是不一樣的。使用引號(「」)時,首先搜索工程文件所在目錄,然後再搜索編譯器頭文件所在目錄。而使用尖括弧(<>)時,剛好是相反的搜索順序。假設我們有兩個文件名一樣的頭文件hardware.h,但內容卻是不一樣的。一個保存在編譯器指定的頭文件目錄下,我們把它叫做文件I;另一個則保存在當前工程的目錄下,我們把它叫做文件II。如果我們使用的是#i nclude <hardware.h>,則我們引用到的是文件I。如果我們使用的是#i nclude 「hardware.h」,則我們引用的將是文件II。筆者以前就遇到過一個同事問,為什麼他修改了那個頭文件裡面的內容,好象跟沒有修改一樣?就是因為他有兩個一樣的頭文件(就像我們剛描述的那樣),他是使用#i nclude<hardware.h>引用的,而他修改時,卻是當前工程所在的目錄下的那個文件。