Stuny Linux - 系统调用_文件访问
来源:互联网 发布:护眼台灯推荐 知乎 编辑:程序博客网 时间:2024/05/18 22:40
Linux中文件编程可以使用两种方法:Linux系统调用、C语言库函数
前者依赖于Linux系统,后者与操作系统是独立的,在任何操作系统下,使用C语言函数库函数操作文件的方法都是相同的。
2. 系统调用——创建
int create(const char *filename, mode_t mode)
参数:
filename: 要创建的文件名(包含路径、缺省为当前路径)
mode:创建模式
常见创建模式:
S_IRUSER 可读
S_IWUSER 可写
S_IXUSER 可执行
S_IRWXU 可读、写、执行
除了使用宏外,也可用数字表示访问权限:
可执行 -> 1
可写-> 2
可读-> 4
可读写-> 6
可读、写、执行 -> 7
无任何权限-> 0
3. 系统调用——打开
int open(const char * pathname, int flags)
int open(const char * pathname, int flags, mode_t mode)
参数:
pathname:要打卡的文件名(包含路径,缺省为当前路径)
flags:打开标志
常见的打开标志:
O_RDONLY 只读方式打开
O_WRONLY 只写方式打开
O_RDWR 读写方式打开
O_APPEND 追加方式打开
O_CREATE 创建一个文件
O_NOBLOCK 非阻塞方式打开
如果使用了O_CREATE标志,则使用的函数时: int open(const char * pathname, int flags, mode_t mode)
这时,需要指定mode来表示文件的访问权限。
4. 系统调用——关闭
int close(int fd)
fd: 文件描述符
文件描述:在Linux系统中,所有打开的文件都对应一个文件描述符。文件描述符本质是一个非负整数。当打开一个文件时,该整数由系统来分配。文件描述符的范围是0-OPEN_MAX。
5. 系统调用——读
int read(int fd, const void *buf, size_t lenght)
功能:从文件描述符fd所指定的文件中读取length个字节到buf所指向的缓冲区中,返回值为实际读取的字节数。
6. 系统调用——写
int write(int fd, const void *buf, size_t length)
功能:把length个字节从buf指向的缓冲区中写到文件描述符fd所指向的文件中,返回值为实际写入的字节数
7. 系统调用——定位
int lseek(int fd, offset_t offset, int whence)
功能:将文件读写指针相对whence移动offset个字节。操作成功是,返回文件指针相对于文件头的位置
whence可使用下述值:
SEEK_SET 相对文件开头
SEEK_CUR 相对文件读写指针的当前位置
SEEK_END 相对文件末尾
offset可取负值,表示向前移动。
由于lseek函数的返回值为文件指针相对于文件头的位置,因此下面调用的返回值就是文件的长度:
lseek(fd, 0, SEEK_END)
8. 系统调用——访问判断
有时我们需要判断文件是否可以进行某种操作(读、写等),这是可以使用access函数:
int access(const char *pathname, int mode)
参数:
pathname:文件名称
mode:要判断的访问权限,可以取以下值或者是他们的组合。 R_OK: 文件可读;W_OK:文件可写; X_OK文件可执行; F_OK:文件存在。
返回值:当我们测试成功时,函数返回0,否则如果一个条件不符合时,返回-1.
例:
#include <unistd.h>
int main()
{
if(access("/etc/passwd", R_OK)==0)
printf("/etc/passwd can be read!");
}
- Stuny Linux - 系统调用_文件访问
- Linux 文件访问--- 系统调用
- Linux下系统调用访问文件
- Linux底层文件访问---read系统调用
- linux系统调用方式访问文件
- Linux系统调用方式访问文件
- linux系统调用方式访问文件
- 系统调用-文件访问
- 系统调用访问文件
- UNIX/Linux系统调用_常用头文件
- Unix/linux系统调用_目录与文件
- linux 应用程序设计基础--系统调用访问文件
- 文件访问(系统调用)
- 系统调用方式访问文件
- 系统调用之文件访问
- 系统调用方式访问文件
- Study Linux -库函数_文件访问
- Linux文件编程,时间编程——系统调用-文件访问
- 系统集成项目管理之何为系统集成
- mysql 数据库的导入导出
- 2013 - ECJTU 暑期训练赛第三场-problem-L
- hdu 1133(卡特兰数+大数乘除+阶乘)
- DELPHI/JAVA连接SAP
- Stuny Linux - 系统调用_文件访问
- 2013 - ECJTU 暑期训练赛第三场-problem-H
- HDU 1870
- ABAP学习
- recv send 阻塞和非阻塞
- 关于c语言中用复数的问题
- 百万程序员苦恼-选择VB.NET还是C#
- 大数相加
- -----XML----