您的位置:首页 > 运维架构 > Linux

Linux 库函数实现文件操作

2012-12-18 22:31 288 查看
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;

}

[b]库函数定位fseek(系统调用为lseek)[/b]

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");

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: