Linux输入输出与文件

1. 基于文件指针的文件操作(缓冲)

linux中对目录和设备的操作都是文件操作,文件分为普通文件,目录文件,链接文件和设备文件。

1.1. 文件的创建,打开与关闭

原型为:

#include <stdio.h> //头文件包含

FILE *fopen(const char *pach,const char *mode); //文件名 模式

int fclose(FILE *stream);

fopen以mode的方式打开或创建文件,如果成功,将返回一个文件指针,失败则返回NULL.

fopen创建的文件的访问权限将以0666与当前的umask结合来确定。

1.2. 读写文件

基于文件指针的数据读写函数较多,可分为如下几组:

数据块读写:

#include <stdio.h>

size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);

size_t fwrite(void *ptr, size_t size, size_t nmemb, FILE *stream);

fread从文件流stream 中读取nmemb个元素,写到ptr指向的内存中,每个元素的大小为size个字节。

fwrite从ptr指向的内存中读取nmemb个元素,写到文件流stream中,每个元素size个字节。

所有的文件读写函数都从文件的当前读写点开始读写,读写完以后,当前读写点自动往后移动size*nmemb个字节。

1.3.文件定位:

文件定位指读取或设置文件当前读写点,所有的通过文件指针读写数据的函数,都是从文件的当前读写点读写数据的。

常用的函数有:

#include <stdio.h>

int feof(FILE * stream); //通常的用法为while(!feof(fp))

int fseek(FILE *stream, long offset, int whence);//设置当前读写点到偏移whence 长度为offset处

long ftell(FILE *stream); //用来获得文件流当前的读写位置

void rewind(FILE *stream); //把文件流的读写位置移至文件开头 èfseek(fp, 0, SEEK_SET);

feof判断是否到达文件末尾的下一个(注意到达文件末尾之后还会做一次)

fseek设置当前读写点到偏移whence 长度为offset处,whence可以是:

SEEK_SET (文件开头 –>0)

SEEK_CUR (文件当前位置 –>1)

SEEK_END (文件末尾 –>2)

ftell获取当前的读写点

rewind将文件当前读写点移动到文件头

1.4.格式化读写:

#include <stdio.h>

int printf(const char *format, ...); //相当于fprintf(stdout,format,…);

int scanf(const char *format, …);

int fprintf(FILE *stream, const char *format, ...);

int fscanf(FILE *stream, const char *format, …);

int sprintf(char *str, const char *format, ...); // eg: sprintf(buf,”the string is;%s”,str);

int sscanf(char *str, const char *format, …);

以f开头的将格式化后的字符串写入到文件流stream中

以s开头的将格式化后的字符串写入到字符串str中

1.5.单个字符读写:

使用下列函数可以一次读写一个字符

#include <stdio.h>

int fgetc(FILE *stream);

int fputc(int c, FILE *stream);

int getc(FILE *stream); è 等同于 fgetc(FILE* stream)

int putc(int c, FILE *stream); è 等同于 fputc(int c, FILE* stream)

int getchar(void); è 等同于 fgetc(stdin);

int putchar(int c); è 等同于 fputc(int c, stdout);

getchar和putchar从标准输入输出流中读写数据,其他函数从文件流stream中读写数据。

1.6.字符串读写:

char *fgets(char *s, int size, FILE *stream);

int fputs(const char *s, FILE *stream);

int puts(const char *s); è 等同于 fputs(const char *s, int size, stdout);

char *gets(char *s); è 等同于 fgets(const char *s, int size, stdin);

fgets和fputs从文件流stream中读写一行数据;

puts和gets从标准输入输出流中读写一行数据。

fgets可以指定目标缓冲区的大小,所以相对于gets安全,但是fgets调用时,如果文件中当前行的字符个数大于size,则下一次fgets调用时,将继续读取该行剩下的字符,fgets读取一行字符时,保留行尾的换行符。

fputs不会在行尾自动添加换行符,但是puts会在标准输出流中自动添加一换行符。

时间: 2024-12-25 19:34:24

Linux输入输出与文件的相关文章

LINUX输入输出与文件&mdash;&mdash;续

1 目录操作 改变目录或文件的访问权限 #include <sys/stat.h> int chmod(const char *path, mode_t mode); //mode形如0777 path参数指定的文件被修改为具有mode参数给出的访问权限. 当修改权限成功返回0,修改失败返回-1. (man 2 chmod) 获取当前目录 #include <unistd.h>   char *getcwd(char *buf, size_t size); //获取当前目录,相当于

linux系统下文件命令详解

/etc 目录下包含的用户信息文件有: 3.1.0 passwd: 用户库文件 用户名 UID,GID 和工作目录都在此文件中 Shadow:存放用户口令的文件,每个用户的 口令加密后都放在此文件中 Group :主要存储用户组信息 Fstab: 系统开机启动自动挂载分区列表,需要设置开机自动挂载的分区都可以在此文件中加入. Inittab: 这个命令的配置文件,此文件是linux启动的重要文件,用来完成对整个系统的基本初始化配置 Hosts: 设定用户自己的ip与名字的对应表,类似window

输入输出与文件

输入输出与文件 一.终端I/O 1.单字符I/O:getchar(),putchar() (1)单字符输入(get character): [ int getchar();] 返回值为输入的字符(ASCII).可以接受任何字符,包括非打印字符.当一次键入多个字符时按下回车键后getchar开始逐个读取所有字符(包括回车符). 在某些编译环境下,因为scanf()函数不读取回车符且将其留在输入队列中,下次调用scanf()时会由于先读取到回车符而在读取数据前过早结束输入,所以常在scanf后用[g

linux磁盘及文件系统管理初步(1)

Linux系统管理 磁盘分区及文件系统管理 RAID LVM:能够实现磁盘边界的动态管理 网络属性管理 程序包管理:程序包的增删查改 sed 和awk 进程查看和管理 内核管理:内核的组成部分,内核的编译安装 系统启动流程 Linux内核的定制,编译内核,busybox 系统安装:kickstart,dhcp,pxe shell脚本编程 Linux磁盘及文件系统管理: 整个操作系统的组成部分:硬件和软件 整个操作系统的组成层次:最底层为硬件设备(这也是我们计算机能够运行的基础),在硬件设备上冯诺

linux驱动程序头文件

1.编写任何驱动程序都必须带的头文件 #include <linux/module.h>:在编写任何模块都需要包含此头文件.该头文件自动包含了 <linux/version.h>头文件,该头文件包含了宏                                                                                                  MODULE_LICENSE("GPL")的定义. #include

小何讲Linux: 基本文件操作和实例

文件操作的基本概念参见博客: 小何讲Linux: 底层文件I/O操作 1.  函数说明 open()函数:是用于打开或创建文件,在打开或创建文件时可以指定文件的属性及用户的权限等各种参数. 所谓打开文件实质上是在进程与文件之间建立起一种连接,而"文件描述符"唯一地标识着这样一个连接 close()函数:是用于关闭一个被打开的文件.当一个进程终止时,所有被它打开的文件都由内核自动关闭,很多程序都使用这一功能而不显示地关闭一个文件. read()函数:是用于将从指定的文件描述符中读出的数据

Linux打开txt文件乱码的解决方法

Linux显示在Windows编辑过的中文就会显示乱码是由于两个操作系统使用的编码不同所致.Linux下使用的编码是utf8,而Windows使用的是gb18030.因此,解决Linux打开txt文件中文乱码可有如下两种方法. 方法一: 在附件终端中,进入到txt文件所在目录,使用命令符"iconv-f gb18030  -t utf8 1.txt -o 2.txt"把gb18030编码的1.txt转换成utf8的2.txt.这样2.txt就成为Linux支持的编码. 方法二: 在附件

Linux下查看文件编码,文件编码格式转换和文件名编码转换

linux相关   2008-10-07 10:46   阅读1392   评论0   字号: 大大  中中  小小  如果你需要在Linux中 操作windows下的文件,那么你可能会经常遇到文件编码转换的问题.Windows中默认的文件格式是GBK(gb2312),而Linux一般都是 UTF-8.下面介绍一下,在Linux中如何查看文件的编码及如何进行对文件进行编码转换. 查看文件编码 在Linux中查看文件编码可以通过以下几种方式: 1.在Vim中可以直接查看文件编码 :set file

Linux中删除文件,磁盘空间未释放问题追踪

在客户使用我们产品后,发现一个问题:在删除了文件后,磁盘空间却没有释放.是有进程在打开这个文件,还是其他情况?我们一起来看看一下两个场景 一. 场景一:进程打开此文件 当一个文件正在被一个进程使用时,用户删除此文件,文件只会从目录结构中删除,但并没有从磁盘删除.当使用这个文件的进程结束后,文件才会真正的从磁盘删除,释放占有的空间. 我们发现剩余磁盘空间比较少时,回去删除一些大的临时文件或者log文件,如果删除之后会发现磁盘空间并未减少,那么可以通过"lsof"命令去查看正在使用该文件的