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");
}
}
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");
}
}
相关文章推荐
- Linux 文件操作库函数 – close
- linux文件操作笔记(1)——系统调用、库函数
- 简单文件操作(Linux下C++实现)
- 【Linux】使用read、write、lseek函数实现文件读写操作
- (转)linux sudo 重定向,实现只有系统管理员才有权限操作的文件中写入信息
- linux下VmwareTools安装 实现文件粘贴复制 跨平台操作
- Linux 下几个文件操作命令的代码实现+myfind find 查找命令 实现
- 【大话QT之五】Windows与Linux下文件操作监控的实现
- 简单文件操作(Linux下C++实现) 打开,读取 写入 关闭
- 归纳整理Linux下C语言常用的库函数----文件操作
- linux 文件操作库函数
- Linux系统遍历文件夹 获取文件大小的操作(C语言实现)
- Linux 下几个文件操作命令的代码实现
- linux 文件操作库函数
- Linux下配置文件读取操作流程及其C代码实现
- Linux下配置文件读取操作流程及其C代码实现
- Linux 文件操作库函数 -- ioctl
- Linux操作练习00:VitualBox下实现文件Windows到Linux的文件共享
- [zt] Linux 下几个文件操作命令的代码实现
- Linux 下几个文件操作命令的代码实现