欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

c語言pread函數(shù),c語言precede函數(shù)

讀寫數(shù)據(jù)塊函數(shù)fread怎么用?

首先是最簡單的讀寫一個字符的函數(shù)fputc和fgetc,在這個基礎(chǔ)上又出現(xiàn)了putw和getw、fgets和fputs,此外還說過格式化讀寫函數(shù)fprintf和fscanf函數(shù)。

創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供常寧網(wǎng)站建設(shè)、常寧做網(wǎng)站、常寧網(wǎng)站設(shè)計、常寧網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計與制作、常寧企業(yè)網(wǎng)站模板建站服務(wù),10多年常寧做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡(luò)服務(wù)。

從原理上來說,只要fputc和fgetc函數(shù)基本就可以完成數(shù)據(jù)的讀寫操作了,但是在實際的使用中會遇到諸多不便,因此上面那一大堆函數(shù)就冒出來了(其實也不多)。上面函數(shù)中最方便的就是格式化讀寫函數(shù)fprintf和fscanf了,因為可以一行行的進(jìn)行讀取,但是有個問題就是這兩位老人家動作比較慢,fprintf在寫文件的時候要把二進(jìn)制形式表示的數(shù)據(jù)轉(zhuǎn)換為ASCII碼形式,fscanf在讀文件的時候又要將ASCII碼轉(zhuǎn)換為二進(jìn)制的形式。

好不容易出來個好用的函數(shù),竟然是個慢性子,聰明的你現(xiàn)在也許就在想了:那能不能不轉(zhuǎn)換,直接讀寫二進(jìn)制的數(shù)據(jù)呢?答案就是fread和fwrite,在需要頻繁進(jìn)行數(shù)據(jù)讀寫的時候,使用這兩個函數(shù)將大大提升效率。

fread和fwrite函數(shù)的定義

fread(pBuffer,size,count,pFile);

fwrite(pBuffer,size,count,pFile);

要讀寫一個數(shù)據(jù)塊的話,無論是讀還是寫,都需要指定一個起始地址,讀的話從這個起始地址讀,寫的話從這個起始地址寫,上面函數(shù)定義中的第一個參數(shù)pBuffer就是用于指定這個起始地址,size讀寫的字節(jié)數(shù),count則指定讀寫多少個size大小的數(shù)據(jù),pFile是文件結(jié)構(gòu)指針。

fread和fwrite函數(shù)使用示例

說到數(shù)據(jù)塊我們自然會想到結(jié)構(gòu)體,如果一個文件中保存的是一個個結(jié)構(gòu)體信息,那每一個結(jié)構(gòu)體信息就可以看做一個數(shù)據(jù)塊了。這里直接用前面文章中我們一直使用的學(xué)生成績信息的結(jié)構(gòu)體:

C語言: 知蟻博客

struct student

{

int nID; //學(xué)號

char chName[20]; //姓名

float fScores[3]; //3門課的成績

};

實例程序有點小復(fù)雜的,首先我們自己新建一個txt文件,也就是ASCII文件啦,然后寫上一些數(shù)據(jù),如下:

1 zhangsan 78.0 79.0 80.0

2 lisi 79.0 77.0 78.0

3 wangwu 90.0 97.0 78.0

4 zhaokai 56.0 57.0 58.0

我們先用ASCII方式打開這個文件,通過fscanf函數(shù)讀取里面的數(shù)據(jù),然后通過fwrite寫入到新的二進(jìn)制格式的文件中,這樣我們就得到了一個保存上面信息的二進(jìn)制格式的文件了,下面就是通過fread函數(shù)進(jìn)行數(shù)據(jù)的讀取了。(記住:fread和fwrite一般用于二進(jìn)制文件的輸入輸出,ASCII文件還是不要考慮了)。

C++語言: 知蟻博客

#include "stdio.h"

struct student

{

int nID; //學(xué)號

char chName[20]; //姓名

float fScores[3]; //3門課的成績

};

void main()

{

FILE *pRead,*pWrite;

struct student tStu[4];

struct student *ptStu = NULL;

int nCount = 0;

//ASCII方式打開文件 用于讀入

pRead=fopen("stu_scores.txt","r");

if(NULL == pRead)

{

return;

}

//二進(jìn)制文件打開文件 用于寫入

pWrite=fopen("stu_scores_bin.txt","wb");

if(NULL == pWrite)

{

fclose(pRead);

return;

}

//fscanf讀取數(shù)據(jù),fwrite寫入數(shù)據(jù)

ptStu = tStu;

while(!feof(pRead))

{

fscanf(pRead,"%d %s %f %f %f\n",ptStu-nID,ptStu-chName,ptStu-fScores[0],ptStu-fScores[1],ptStu-fScores[2]);

fwrite(ptStu,sizeof(struct student),1,pWrite);

printf("%d %s %.1f %.1f %.1f\n",ptStu-nID,ptStu-chName,ptStu-fScores[0],ptStu-fScores[1],ptStu-fScores[2]);

ptStu++;

}

fclose(pRead);

fclose(pWrite);

memset(tStu,0×00,sizeof(tStu)); //清空數(shù)據(jù)

//二進(jìn)制文件打開文件 用于讀取

pRead=fopen("stu_scores_bin.txt","rb");

if(NULL == pRead)

{

printf("open file stu_scores_bin.txt failed");

return;

}

//下面有兩種fread的讀數(shù)據(jù)方式,將下面的1換成0,則使用第二種方式

#if 1

//一條條的讀取

ptStu = tStu;

nCount = fread(ptStu,sizeof(struct student),1,pRead);

while(nCount0)

{

printf("%d %s %.1f %.1f %.1f\n",ptStu-nID,ptStu-chName,ptStu-fScores[0],ptStu-fScores[1],ptStu-fScores[2]);

ptStu++;

nCount = fread(ptStu,sizeof(struct student),1,pRead);

}

#else

//因為事先知道有4條信息,因此可以直接讀取四條信息

fread(tStu,sizeof(struct student),4,pRead);

for(nCount=0; nCount4; nCount++)

{

printf("%d %s %.1f %.1f %.1f\n",tStu[nCount].nID,tStu[nCount].chName,tStu[nCount].fScores[0],tStu[nCount].fScores[1],tStu[nCount].fScores[2]);

}

#endif

fclose(pRead);

}

上面用fread讀取的時候,我們既可以一條條的讀取,也可以一次讀入多條,這就是為什么參數(shù)中有size和count的原因

C語言中把文件里面的幾組數(shù)據(jù)依次讀出來分別賦值給幾個結(jié)構(gòu)體變量(用鏈表存儲)怎么實現(xiàn)?求具體代碼

feof(),用這個函數(shù)判斷是否讀到文件尾了。

fread(buf,size,count,fp);//buf輸入數(shù)據(jù)起始地址,size 每個數(shù)據(jù)塊的大小,count 每次寫入的數(shù)據(jù)塊個數(shù),fp 文件指針

寫好后是:

while(!feof(fp))

{

fread(temp[i],sizeof(struct use),1,fp);//這個讀出來放數(shù)組里面

i++;

}

問題是你讀的是txt文件,完全可以用fscanf()函數(shù)么。

編寫線程并發(fā)拷貝程序,通過模擬管道文件的實現(xiàn)(管道定義、創(chuàng)建管道、讀管道程序和寫管道程序程序?qū)崿F(xiàn))

#include sys/wait.h

#include assert.h

#include stdio.h

#include stdlib.h

#include unistd.h

#include string.h

int main(int argc, char *argv[])

{

int pfd[2];

pid_t cpid;

char buf;

assert(argc == 2);

if (pipe(pfd) == -1)

{

perror("pipe");

exit(EXIT_FAILURE);

}

//創(chuàng)建子進(jìn)程

cpid = fork();

if (cpid == -1)

{

//創(chuàng)建子進(jìn)程失敗

perror("fork"); exit(EXIT_FAILURE);

}

if (cpid == 0)

{ /* 子進(jìn)程中讀取管道里面讀數(shù)據(jù) */

close(pfd[1]); /* 關(guān)閉不使用的管道寫入端 */

while (read(pfd[0], buf, 1) 0)

{

write(STDOUT_FILENO, buf, 1);//在標(biāo)準(zhǔn)的輸出設(shè)備上輸出讀取管到的內(nèi)容

}

write(STDOUT_FILENO, "\n", 1);

close(pfd[0]);

_exit(EXIT_SUCCESS);

}

else

{ /* 父進(jìn)程將參數(shù) argv[1]字符串 寫入管道 */

close(pfd[0]); /* 關(guān)閉不使用的管道讀取端 */

write(pfd[1], argv[1], strlen(argv[1]));

close(pfd[1]); /* 關(guān)閉管道寫入端,此時讀取端就會收到 EOF 標(biāo)志*/

wait(NULL); /* 等待子進(jìn)程運行結(jié)束 */

exit(EXIT_SUCCESS);

}

}

文章名稱:c語言pread函數(shù),c語言precede函數(shù)
網(wǎng)站網(wǎng)址:http://chinadenli.net/article16/dsegodg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供關(guān)鍵詞優(yōu)化App設(shè)計商城網(wǎng)站網(wǎng)站收錄外貿(mào)網(wǎng)站建設(shè)網(wǎng)站排名

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)