首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

Linux 库函数兑现文件操作

2013-01-05 
Linux 库函数实现文件操作1. Linux系统调用,文件的描述符使用的是一个整数,库函数访问文件使用FILE类型的

Linux 库函数实现文件操作

1. Linux系统调用,文件的描述符使用的是一个整数,库函数访问文件使用FILE类型的指针去指向描述文件;

2. 库函数不随系统平台而变,即不管win还是Linux都适用;

 

库函数 - 读文件

size_t  fread(void *ptr, size_t  size, size_t  n, FILE  *stream)

功能:从stream指向的文件中读取n个字段,每个字段为size字节,并将读取的数据放入ptr所指向的字符数组中,返回实际已读取的字节数。(读出来的数据量为size*n)

 

库函数 - 写文件

size_t  fwrite(const void *ptr, size_t  size, size_t  n, FILE *stream)

功能:从缓冲区ptr所指向的数组中把n个字段写到stream指向的文件中,每个字段长为size个字节,返回实际写入的字段数。

 

库函数 - 创建和打开

FILE  *fopen(const char *filename,  const char *mode)

filename:打开的文件名(包含路径,缺省为当前路径)

mode:打开模式

#include <stdio.h>

#include <stdlib.h>

 

int main()

{

         FILE *fp;

         char ch;

         char fname[30];

 

         printf("Please input the file name:");

         scanf("%s", &fname);

         fp=fopen(fname, "r");               //以只读方式打开

         if(fp==NULL){                               //打开失败

                   printf("Open failed.\n");

                   exit(1);

         }

         while((ch=getc(fp))!=EOF)                 //一个字符一个字符遍历

         {

                   putchar(ch);                                 //输出ch传入的字符

         }

         fclose(fp);                                               //关闭文件

         return 0;

}

 

读字符:

fgetc 获取字符:

fputc 输出字符:

#include <stdio.h>

#include <string.h>

 

int main()

{

         char msg[] = "Hello, linuxdba";

         // int i;

         FILE *fp;

         char ch;

         fp = fopen("/etc/passwd", "r");

         while ((ch = fgetc(fp)) != EOF)

         //while (msg[i]&&(i < strlen(msg)))                   // ok,pass!

         {

                   fputc(ch, stdout);     //什么意思?

                   // i ++;

         }

         fclose(fp);

         return 0;

}

路径获取

char  *getcwd(char  *buffer, size_t  size)

功能:提供一个size大小的buffer,getcwd会把当前的路径名拷贝到buffer中。如果buffer太小,函数会返回-1.

 

库函数 - 创建目录

int mkdir(char *dir, int  mode)

功能:创建一个新目录。返回0表示成功,返回-1表示出错。

 

 

 

// 拷贝一个文件到另外一个地方

 

#include <stdio.h>

int main()

{

         FILE *fp = NULL;       //定义文件指针,定义指针时需要将指针指向空。

         FILE *fq = NULL;

         char ch;

         fq = fopen("/root/c_code/test/t.c", "a");                 //“a”表示以附加的方式打开,如果文件不存在就创建文件

         fp = fopen("/etc/passwd", "r") ;                                  //打开文件

         while ((ch = fgetc(fp)) != EOF)                                       // fgetc和fputc拷贝

         {

fputc(ch, fq);

         }

         fclose(fp);         //     关闭文件

         fclose(fq);

         fp = NULL;         // 将指针指向空,否则仍然指向原打开文件位置

         fq = NULL;

         return 0;

}

问题:如何实现文件名输入方式拷贝,即通用模式,当需要拷贝的时候,输入源文件名和目的文件名即可?

#include <stdio.h>

 

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

{

FILE *ffrom = NULL;

        FILE *fto = NULL;

        char ch;

        if (argc < 3)       // pop the error for less source or target file.

        {

                  perror("Please input the source file and target file.\n");

        }

        ffrom = fopen(argv[1], "r") ;

        fto = fopen(argv[2], "a");

        while ((ch = fgetc(ffrom)) != EOF)

        {

                  fputc(ch, fto);

        }

        fclose(ffrom);  // close FILE pointer

        fclose(fto);

        ffrom = NULL;  // point to NULL, otherwise it will still point to source file.

        fto = NULL;

        return 0;

}

格式化读fscanf: int  fscanf(FILE *stream, char *format, [argument...])

#include <stdio.h>

int main(){

         int i;

         fscanf(stdin, "%d", &i);             //格式化读

                   printf("the i is %d.\n", i);

}

 

 

       注意:fscanf读以空格或者回车作为结束符,例如输入"2 5",此时只读取2

 

格式化写fprintf:int  fprintf(FILE *stream, char *format, [argument...])

#include <stdio.h>

#define SOURCE_FILE "/root/c_code/test/t.c"                //宏定义文件

 

int main(){

         int a = 1;

         char c = '\n';

         char s[] = "this is a string.";

         FILE *fp = NULL;

         fp = fopen(SOURCE_FILE, "a");                  //打开文件,并用文件指针指向它

         fprintf(fp, "%s%c", s, c);                              //写入s字符串和c字符

         fprintf(fp, "%d\n", a);                                   //写入a数字

         fclose(fp);                                                        //关闭文件指针

         fp = NULL;

}

 

 

库函数定位fseek(系统调用为lseek)

int fseek(FILE *stream, long offset, int whence)

whence:

         SEEK_SET从文件的开始处开始搜索;

         SEEK_CUR从文件的当前位置开始搜索;

         SEEK_END从文件的结束处开始搜索

 

 

路径获取getcwd:

char  *getcwd(char *buffer, size_t size)

功能:提供一个size大小的buffer,将当前的路径拷贝到buffer中,如果buffer太小函数返回-1.

#include <stdio.h>

#include <unistd.h>

 

int main(){

         int fd;

         char buffer[30];

         getcwd(buffer,sizeof(buffer));

         printf("The current path is: %s\n", buffer);

}

 

创建目录mkdir:

int mkdir(char *dir, int mode)

功能:创建一个新目录。

返回值:0表示成功,-1表示出错。

#include <stdio.h>

#include <sys/stat.h>

#define DIR "/root/test_dir"

 

int main(){

         int fd;

         if((mkdir(DIR, 0755)) == -1){

                   printf("mkdir fail.\n");

         }

         else{

                   printf("mkdir success.\n");

         }

 

}

 

热点排行