Linux - 文件操作

一、Linux文件结构

文件,除了本身包含的内容以外,还有一个管理信息,包括文件的创建/修改日期和它的访问权限,这些属性被保存在文件的inode(节点)中。

目录是用于保存其他文件的节点号和名字的文件。文件节点号可以通过ln -i 命令查看。

UNIX 与 LINUX 中比较重要的设备文件有3个: /dev/console, /dev/tty 和 /dev/null

/dev/console 代表系统控制台。

/dev/tty 如果一个进程有控制端的话,那么特殊文件/dev/tty就是这个控制终端的别名。

/dev/null 文件是空设备, 所有写向这个设备的输出都将被丢弃。

二、系统调用和设备驱动程序

访问设备驱动程序的底层函数

open: 打开文件或设备

read:从打开的文件或设备里读数据

write:向文件或设备写数据

colse:关闭文件或设备

ioctl: 把控制信息传递给设备驱动程序

三:库函数

为了给设备和磁盘文件提供更高层的接口,Linux和UNIX提供了一系列的标准函数库。

四、底层文件访问

当一个程序开始运行时,它一般人有3个已经打开的文件描述符:

0:标准输入

1:标准输出

2:标准错误

write系统调用原型

#include <stdio.h>
size_t write(int fildes, const void *buf, size_t nbytes);

write的作用是把缓冲区buf的前nbytes个字节写入与文件描述符fields关联的文件中。

返回实际写入的字节数。如果返回值为0,则没有写入任何数据。

如果返回是-1,表示出现错误

#include <unistd.h>
#include <stdlib.h>

int main()
{
    if ((write(1, "Here is some data\n", 18)) != 18)
        write(2, "A write error has occurred on file descriptor 1\n",46);

    exit(0);
}

read系统调用

#include <unistd.h>

size_t read(int fildes, void *buf, size_t nbytes);

从文件描述符fields相关联的文件里读入nbytes个字节的数据,并把它们放到数据区buf中。返回实际读入的字节数。

如果返回0,表示未读入任何数据,已到达文件尾。

如果是-1,表示read出现错误。

#include <unistd.h>
#include <stdlib.h>

int main()
{
    char buffer[128];
    int nread;

    nread = read(0, buffer, 128);
    if (nread == -1)
        write(2, "A read error has occurred\n", 26);

    if ((write(1,buffer,nread)) != nread)
        write(2, "A write error has occurred\n",27);

    exit(0);
}

open系统调用

#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>

int open(const char *path, int oflags);
int open(const char *path, int oflags, mode_t mode)

open建立了一条到文件或设备的访问路径。如果成功,它将返回一个可以被read,write和其他系统调用使用的文件描述符(唯一的),不会与任何其他运行中的进程共享。

path是准备打开的文件或设备的名字, oflags参数用于指定打开文件所采取的动作。

oflags必选模式:

O_RDONLY  以只读方式打开

O_WRONLY  以只写方式打开

O_RDWR   以读写方式打

oflags可选模式

O_APPEND  把写入数据追加在文件末尾

O_TRUNC   把文件长度设置为零,丢弃已有内容

O_CREAT    如果需要,就按参数MODE中给出的访问模式创建文件

开O_EXCL    与O_CREAT一起使用

open在调用成功时,返回一个新的文件描述符(非负整数)。

时间: 2024-10-12 19:30:22

Linux - 文件操作的相关文章

linux文件操作

1.linux文件操作 cat test.txt | head -n 100 查看开始100行 cat finalout.txt | head -n 100 | cut -d , -f 2   安装,分割各行,取第2个位置的数据 cat test.txt |sed 's/""//g' 查看下效果 cat finalout.txt | head -n 10 | cut -d , -f 2 按,切割 cat part_name_tmp.txt | cut -d \" -f 2 &

关于Linux文件操作1.1

本文章记录本人在学习Linux中遇到的一些比较好的题目,给大家分享一下. 先来实验题目: 编程实现一个程序,功能是每一秒钟向屏幕打印当前系统时间,和当前行号示例如下 该程序应该无限循环,直到强制中断该进程为止(比如按Ctrl-C中断程序).接着再启动程序,将系统时间追加到原文件之后,并且序号能够接续上次的序号: 好了看完题目后我们应该想的是,实现这么一个功能我们需要什么知识? 我们实现功能的逻辑是什么? 我们在写代码中有什么细节需要注意的(PS:使代码尽善尽美!) a):  先花五分钟想一下这个

Linux文件操作学习总结【转载】

本文转载自: http://blog.csdn.net/xiaoweibeibei/article/details/6556951 文件类型:普通文件(文本文件,二进制文件).目录文件.链接文件.设备文件.管道文件. 文件的权限:读.写.执行 文件的相关信息:目录结构.索引节点.文件数据 索引节点的stat结构 struct stat{ dev_t st_dev;//文件使用的设备号 ino_t st_inl;//索引节点号 mode_t st_mode;//文件访问权限 nlink_t st_

Linux文件操作相关函数

一.整体大纲 st_mode整体介绍: st_mode详细介绍: 二. Linux文件操作相关函数 1. stat 作用:获得文件信息,也可以获取文件大小. 头文件 #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> 函数原型 int stat(const char *path, struct stat *buf); int fstat(int fd, struct stat *buf); i

Linux 文件操作总结

http://blog.163.com/he_junwei/blog/static/19793764620152592737741/ ioctl?? lseek?? 文件是linux中的一个重要概念.在Linux中,一切(几乎一切)都是文件.简单的说,C中基本的的printf()函数,scanf()函数,其实都属于文件操作. 对于文件操作,虽然都是通过函数调用的方式实现,却还是能分为两类:系统调用和库函数. 这篇文章将先介绍linux中文件的概念,系统调用和库函数的概念 ,然后具体的讨论两种方式

Linux 文件操作监控inotify功能及实现原理【转】

转自:http://blog.chinaunix.net/uid-26585427-id-5012973.html 1. inotify主要功能 它是一个内核用于通知用户空间程序文件系统变化的机制. 众所周知,Linux 桌面系统与 MAC 或 Windows 相比有许多不如人意的地方,为了改善这种状况,开源社区提出用户态需要内核提供一些机制,以便用户态能够及时地得知内核或底层硬件设备发生了什么,从而能够更好地管理设备,给用户提供更好的服务,如 hotplug.udev 和 inotify 就是

Linux文件操作的常用系统函数说明

1. open打开文件 (man 2 open 查看) int open(const char *pathname, int flags); //pathname文件名(路径):flags打开模式,有O_RDONLY, O_WRONLY, O_RDWR int open(const char *pathname, int flags, mode_t mode); //该函数一般用于创建新文件,flags添加O_CREAT,比如:O_RDWR|O_CREAT int creat(const cha

linux 文件操作库函数

fopen :打开文件 fread :读文件 fwrite : 写文件 fgetc : 读字符 fputc : 写字符 fscanf : 格式化读 fprintf : 格式化写 fseek : 文件偏移量定位 getcwd .getwd.get_current_dir_name : 获取当前路径 mkdir : 创建目录 feof : 检测文件尾 ferror : 检测文件操作是否成功 fileno : 将文件指针转换为文件描述符

linux文件操作篇 (四) 目录操作

#include <sys/stat.h>#include <unistd.h>#include <dirent.h> //创建文件夹 路径 掩码 int mkdir(const char *path, mode_t mode); // 获取当前工作路径 buf用于接受路径缓存 char *getcwd(char *buf, size_t size); // 进入文件夹 和cd一样 int chdir(const char *path); //打开路径并建立子目录流,返

linux 文件操作编程

Linux中所有的设备和文件的操作都使用文件描述符来进行. 文件描述符是一个非负的整数,它是一个索引值,指向内核中每个进程打开的记录表. 当打开一个文件或者创建一个新文件时,内核就向进程返回一个文件描述符;当需要读写文件的时候,就要把文件描述符作为参数传递给相应的函数. 一个进程时,都会打开3个文件:标准输入.标准输出和标准出错处理.分别对应文件描述符的0.1.2. rename函数 #include <stdio.h> int rename(const char *oldpath, cons