Linux编程之文件操作


1Linux下读写文件

Linux下读写文件
在Linux编程需要读写文件时,有两种方式:
(1)ANSI C 【推荐】
使用stdio.h里的函数。
fopen, fclose, fwrite, fread

(2)Linux API
Linux提供了另外一套API用于操作文件
open close write read

ANSI C优点:被各平台都支持,因此一份代码可以适 用多种平台。

ANSI C文件操作
ANSI C函数:
(1)文件路径: 使用/
(2)文本文件时,换行符有区别
windows: \r\n
linux: \n
注:换行符是一个约定俗成的东西

Linux API文件操作
以写方式打开文件
int fd = open("/home/mytest/123.txt",
O_WRONLY | O_CREAT,
0644);
参数1: 文件路径
参数2: 标识位,
O_WRONLY表示写入,
O_CREAT表示当不存在时,创建新文件
参数:0644,表示创建文件时的权限位 (0644: 字面常量,8进制)

以读方式打开文件
int fd = open("/home/mytest/123.txt", O_RDONLY);
参数1:文件路径
参数2:O_RDONLY: 以只读方式打开
参数3:省略

写文件: write(fd, buf, n);
读文件: int n = read(fd, buf, maxsize);
关闭文件: close(fd);
fd: file descriptor文件描述符,是一个整数
Linux编程之文件操作

以下三者选一:
O_RDONLY 只读方式
O_WRONLY 以只写方式打开文件
O_RDWR 以可读写方式打开文件

额外的标识位:
O_CREAT可与O_WRONLY联用,若欲打开的文件不存在则自 动建立该文件
O_TRUNC 可与O_WRONLY联用,在打开文件时清空文件 O_APPEND可与O_WRONLY联用,表示追加内容
O_NONBLOCK 表示以“非阻塞”方式读/写数据时

什么时候用Linux API?
普通情况下,均推荐使用ANSI C来操作文件。
仅当:该文件表示一个外部设备时(设备文件), 才用Linux API来操作。
为什么一个文件会代表一台设备?

小结:
1,读写文件 两种方式的区别
2,读写文件 两种方式的应用

2Linux下的设备文件

Linux下的设备文件
在Linux下,有一种文件的类型叫设备文件
ls ‐l /dev
在/dev目录下的文件基本上都是设备文件,文 件属性以c或b打头(charactor, block)
crw‐‐‐‐‐‐‐ 1 root root 108, 0 8月 3 05:11 ppp
brw‐rw‐‐‐‐ 1 root disk 1, 0 8月 3 05:11 ram0
dev: device

设备文件用于代表一个物理设备
例如,
声卡、显卡、键盘、鼠标、摄像头、打印机、扫描 仪
例如:
/dev/snd/ 下的文件用于控制声卡

设备文件的原理
例如,
假设/dev/printer 代表一台打印机, 则fwrite向它写入数据, 操作系统最终会把数据 传送到打印机。

fopen("/dev/printer") fwrite (“12345”)
Linux 设备驱动程序
物理设备

open: 打开设备
close: 关闭设备
write: 向设备写入数据
read: 从设备读取数据
ioctl: 向设备发送额外的命令
查看ioctl函数的帮助
man ioctl

举例
(一般地,在嵌入式开发时容易实验本节内容)
假设,/dev/led对应了一个LED灯
int fd = open("/dev/led", O_WRONLY);
ioctl(fd, 100, 1); // 控制灯灭
ioctl(fd, 100, 0); // 控制灯亮
close(fd);
以上仅为演示,具体发送的命令及参数的格式,是由你 的设备驱动程序规定的。(驱动程序的作者来规定)

小结
对于嵌入式Linux开发者(各种开发板,ARM),本节 内容非常重要。
对于Linux服务器开发人员,本节不太重要。

学习资源 《C语言/C++学习指南》Linux开发篇

相关文章: