linux文件操作之系统调用
在linux中,一切都是文件,文件为操作系统服务和设备提供了一个简单而统一的接口,这就意味者程序可以像使用文件那样使用各种设备。大多数情况下对于文件的操作只用到open,write,lseek,read,close五个系统调用。本文通过一个简单的例子来介绍这五个调用及关联内容。
先看例子:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#include<unistd.h>
#include<stdlib.h>
#include<stdio.h>
#include<fcntl.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<string.h>
int
main( void )
{
int file_des = open( "my_file.txt", O_RDWR | O_CREAT | O_EXCL, S_IRUSR | S_IWUSR | S_IXUSR | S_IXOTH );
char *write_buf = "zhujiangfeng\n";
if ( write( file_des,write_buf, strlen( write_buf )) != strlen( write_buf ) )
{
write( STDERR_FILENO, "WRITE ERROR!\n", 13 );
exit( 0 );
}
if ( lseek( file_des, 4, SEEK_END ) == -1 )
{
write( STDERR_FILENO, "SEEK ERROR!\n", 11 );
exit( 0 );
}
write( file_des, "AAAAAA", 6 );
lseek( file_des, 0, SEEK_SET );
char read_buf[50];
if ( read( file_des, read_buf, 50 ) == -1 )
{
write( STDERR_FILENO, "READ ERROR!\n", 12 );
exit( 0 );
}
write( STDOUT_FILENO, read_buf, 50 );
close( file_des );
exit( 1 );
}
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
这是一个简单的读写文件的例子,先创建一个文本文件,写入一些内容,再把文本内容输出到标准输出,下面开始分析这个例子:
1 int file_des = open( "my_file.txt", O_RDWR | O_CREAT | O_EXCL, S_IRUSR | S_IWUSR | S_IXUSR | S_IXOTH );
以读写方式打开一个新建文件 my_file.txt,指定其访问权限为 文件属主具有读,写,执行权限,组用户没有任何权限,其他用户只有执行权限。
open调用用于创建或打开文件,返回一个文件描述符。
#include<fcntl.h>
#include<sys/stat.h>
#include<sys/types.h>
int open( const char *path, int oflags );
int open( const char *path, int oflags, mode_t mode );
第一个oen用于打开已有的文件,第二个open用于创建新文件。
(1)oflags参数说明了文件的打开方式,值为以下一个或多个常量的“或”运算(这些常量定义在<fcntl.h>):
O_RDONLY 只读打开
O_WRONLY 只写打开
O_RDWR 读,写打开
以上常量为必选,且只能选一个,下列常量为可选:
O_APPEND 在文件尾端追加
O_TRUNC 将文件长度截短为0
O_CREATE 若文件不存在,按照参数mode指定的访问权限创建
O_EXCL 测试要创建的文件是否存在,和O_CREATE一起使用,使得文件的测试和创建是一个院子操作
(2)mode参数指定了新建文件的访
相关新闻>>
- 发表评论
-
- 最新评论 进入详细评论页>>