溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

與文件操作相關(guān)的函數(shù)

發(fā)布時間:2020-07-05 10:18:47 來源:網(wǎng)絡(luò) 閱讀:648 作者:ye小灰灰 欄目:編程語言

一.fopen函數(shù):

函數(shù)原型:FILE*   fopen(const   char *  path,   const   char*  mode)

path參數(shù) :表示一個文件名,可以包含路徑和文件名。如:“test.txt”  或"C:\\homework\\test.txt"  注意有兩個\\,因為其中一個  ’\‘  代表轉(zhuǎn)義字符。

mode參數(shù): man fopen文本中的內(nèi)容:

 r      Open text file for reading.  The stream  is  positioned  at  the
              beginning of the file.

       r+     Open  for  reading and writing.  The stream is positioned at the
              beginning of the file.

       w      Truncate file to zero length or create text  file  for  writing.
              The stream is positioned at the beginning of the file.

       w+     Open  for  reading  and writing.  The file is created if it does
              not exist, otherwise it is truncated.  The stream is  positioned
              at the beginning of the file.

       a      Open  for  appending (writing at end of file).  The file is cre‐
              ated if it does not exist.  The stream is positioned at the  end
              of the file.

       a+     Open  for  reading  and appending (writing at end of file).  The
              file is created if it does not exist.  The initial file position
              for  reading  is  at  the  beginning  of the file, but output is
              always appended to the end of the file.

注意:后三個為The file is created if it does  not exist, otherwise it is truncated

對文件的使用方式有如下6種:

文件使用方式由r,w,a,t,b,+六個字符拼成,各字符的含義是:
r(read): 讀
w(write): 寫
a(append): 追加
t(text): 文本文件,可省略不寫
b(banary): 二進(jìn)制文件
+: 讀和寫

返回值:如果成功,則返回一個文件指針,如果失敗,則返回NULL。



二.fread函數(shù):size_t   fread(void*  buf,  size_t   size,   size_t  nmemb,   FILE*   stream)

     fwrite函數(shù):size_t   fwrite(const  void*  buf,   size_t   size,   size_t   nmemb,   FILE* stream)

buf參數(shù):數(shù)據(jù)緩沖的地址,注意為void類型。

size參數(shù): 因為buf為void類型,所以要指明每個數(shù)據(jù)項的大小。注意兩個函數(shù)都是以數(shù)據(jù)項來讀寫的,一次讀或?qū)懸粋€數(shù)據(jù)項,而不是字節(jié)。數(shù)據(jù)項可以是char,int,結(jié)構(gòu)體等等。

nmemb參數(shù):為希望讀/寫的數(shù)據(jù)項個數(shù)。注意,實際讀/寫操作不一定會讀/寫count各數(shù)據(jù)項。

stream參數(shù):一個文件指針。

返回值:man  fread文本內(nèi)容如下:

RETURN VALUE
       On  success,  fread()  and  fwrite() return the number of items read or
       written.  This number equals the number of bytes transferred only  when
       size  is 1.  If an error occurs, or the end of the file is reached, the
       return value is a short item count (or zero).

       fread() does not distinguish between end-of-file and error, and callers
       must use feof(3) and ferror(3) to determine which occurred.
文本總結(jié):返回值都是實際讀/寫操作的數(shù)據(jù)項數(shù),發(fā)生錯誤或者讀到文件末尾并不是返回-1,也是一個讀/寫的數(shù)據(jù)項數(shù)或者0。如果要判斷是發(fā)生錯誤還是到文件結(jié)尾,可以調(diào)用feof(3)和ferror(3)。


三.fclose函數(shù):int   fclose(FILE*   fp)

關(guān)閉一個文件

返回值:返回值 若關(guān)文件動作成功則返回0,有錯誤發(fā)生時則返回EOF并把錯誤代碼存到errno。



相關(guān)代碼:
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<sys/types.h>
#include<string.h>
const int BUF_SIZE = 1024;

int main()
{
    FILE* stream;
    FILE* wstream;
    char buf[BUF_SIZE];

    stream = popen("ls -l","r");
    wstream = fopen("test_popen.txt","w+");

    memset(buf, '\0', sizeof(buf));
    fread(buf, sizeof(char), sizeof(buf), stream);//把返回標(biāo)準(zhǔn)I/O流內(nèi)的內(nèi)容讀到buf中
    fwrite(buf,sizeof(char), strlen(buf), wstream);

    fclose(wstream);//一定要記得關(guān)閉
    pclose(stream);//只能用pclose不能用fclose

    return 0;
}

與文件操作相關(guān)的函數(shù)




四.fgets函數(shù):char*  fgets(char*   buf,   size_t    size,    FILE*   stream)  ('\n'   ,   '\0')

       功能:從文件中讀取一行,送到buf中。

      fgets參數(shù):,參數(shù)s是緩沖區(qū)的首地址,size是緩沖區(qū)的長度,該函數(shù)從stream所指的文件中讀取以'\n'結(jié)尾的一行(包括'\n'在內(nèi))存到緩沖區(qū)s中,并且在該行末尾添加一個'\0'組成完整的字符串

       返回值:  如果成功,buf指向哪返回值就指向哪,出差或讀到文件尾時返回NULL。

注意:1.因為該函數(shù)會在行末尾加   ‘\0’  ,所以它最多只能讀size-1個字符。

            2.因為該函數(shù)是讀取一行,它的返回條件是讀到   ‘\n’  ,它看待   '\0  '是一個普通的字符。

            3.它不能讀二進(jìn)制文件。



五.fputs函數(shù): int   fputs(const  char *  buf,   FILE*    stream)     (沒有'\0')

      功能:把buf中保存的字符串寫到文件中。

      返回值:成功返回讀入字符串?dāng)?shù),出差返回EOF

注意:緩沖區(qū)s中保存的是以'\0'結(jié)尾的字符串,fputs將該字符串寫入文件 stream,但并不寫入結(jié)尾的'\0'。與fgets不同的是,fputs并不關(guān)心的字符串中的'\n'字符,


相關(guān)代碼:

 1 #include<stdio.h>
  2 
  3 int main()                                                                  
  4 {
  5     char *buf = "i want to have a star\n";
  6     FILE* fp = fopen("./test.txt","w+");
  7     fputs(buf,fp);
  8     return 0;
  9 }

與文件操作相關(guān)的函數(shù)


六.fprintf函數(shù):int  fprintf(FILE*  stream ,const  char *format,   . . .)
       功能:傳送格式化輸出到一個文件
       format 格式化輸入函數(shù),和printf里的格式一樣
       返回值:成功時返回轉(zhuǎn)換的字節(jié)數(shù),失敗時返回一個負(fù)數(shù)
       fp = fopen("./test.c","w+");
       fprintf(fp,"%s\n",str);


.fscnaf函數(shù): int fscanf(FILE*  stream, const char*  format,   .  .  .)

       功能:從一個流中執(zhí)行格式化輸入
       format 格式化輸出函數(shù),和scanf里的格式一樣
       返回值:成功時返回轉(zhuǎn)換的字節(jié)數(shù),失敗時返回一個負(fù)數(shù)
       fp = fopen("/local/test.c","a+");
       fscanf(fp,"%s",str);


八.fgetc函數(shù):int fgetc(FILE* stream)
       函數(shù)說明: fgetc()從參數(shù)stream所指的文件中讀取一個字符。若讀到文件尾而無數(shù)據(jù)時便返回EOF。
       返回值: getc()會返回讀取到的字符,若返回EOF則表示到了文件尾。

#include<stdio.h>
main()
{
FILE *fp;
int c;
fp=fopen(“./test.txt”,”w+”);
while((c=fgetc(fp))!=EOF)
printf(“%c”,c);
fclose(fp);
}


九.fputc函數(shù):int  fputc(int  c, FILE* stream)
       函數(shù)說明 :fputc 會將參數(shù)c 轉(zhuǎn)為unsigned char 后寫入?yún)?shù)stream 指定的文件中。
       返回值 :fputc()會返回寫入成功的字符,即參數(shù)c。若返回EOF則代表寫入失敗。

#include<stdio.h>
main()
{
FILE * fp;
char a[26]=”abcdefghijklmnopqrstuvwxyz”;
int i;
fp= fopen(“./test.txt”,”w”);
for(i=0;i<26;i++)
fputc(a,fp);
fclose(fp);
}


十.flush函數(shù):int  fflush(FILE*  stream)
函數(shù)說明 :fflush()會強(qiáng)迫將緩沖區(qū)內(nèi)的數(shù)據(jù)寫回參數(shù)stream指定的文件中。如果參數(shù)stream為NULL,fflush()會將所有打開的文件數(shù)據(jù)更新。
返回值 成功返回0,失敗返回EOF,錯誤代碼存于errno中。



向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI