您的位置:首页 > 运维架构 > Linux

Tiny6410学习ing—(二)、嵌入式Linux应用开发—(2)、文件编辑(系统调用方式访问文件)—①

2012-10-29 12:45 781 查看
转载:http://blog.sina.com.cn/s/blog_7ec8fc2c01013tst.html

首先介绍一下文件的编程:

Linux中文件编程可以使用两种方法:

△:Linux系统调用

△:C语言库函数

注意:

Linux系统调用是依赖于Linux系统的,C语言与操作系统是独立的,在任何操作系统下,使用C语言库函数操作文件的方法都是相同的。

1、系统调用-创建

int creat(const char *filename,mode_t mode)

(注意:这里是有返回值的哦~~)

△:filename:要创建的文件名(包含路径,缺省为当前路径)

△:mode:创建模式(就是跟以前的文件模式一样的~~)

常见的创建模式(使用宏名):

S_IRUSR            可读

S_IWUSR            可写

S_IXUSR            可执行

S_IRWXU            可读、写、执行

其中除了可以使用上述宏名以外,还可以直接使用数字来表示文件的访问权限:

△:可执行-》1

△:可写  -》2

△:可读  -》4

△:无任何权限-》0

2、系统调用-打开

在介绍打开文件的之前先介绍一下文件描述:

在Linux系统中,所有打开的文件都对应一个文件描述符。

文件描述符的本质是一个由非负整数。

当打开一个文件时,该整数由系统来分配(也就是它所对应的函数的返回值喽~~)

int open(const char *pathname,int flags)

int open(const char *pathname,intflags,mode_t mode)

(这里也要注意了,也是有返回值的啊~~)

△:pathname:要打开的文件名(包含路径,缺省为当前路径)

△:flags:打开标志

常见的打开标志:

O_RDONLY      只读方式打开

O_WRONLY      只写方式打开

O_RDWR        读写方式打开

O_APPEND      追加方式打开

O_CREAT       创建一个文件

O_NOBLOCK     非阻塞方式打开

注意:

如果使用了O_CREATE标志,那就要使用有是哪个变量的函数~~

如果没有那个标志,就是用两个变量的标志~~

3、系统调用-关闭

当我们完成操作以后,需要关闭文件:

int close(int fd)

△:fd:文件描述符,就是2中打开一个文件的返回值喽,有开必有关吗,C语言就是这个道理啊~~

4、系统调用-读

int read(int fd,const void *buf,size_tlength)

功能:

从文件描述符fd所指向的文件中读取length个字节到buf所指向的缓冲区中,其中返回值为实际读取的字节数。

5、系统调用-写

int write(int fd,const void *buf,size_tlength)

功能:

把length个字节从buf指向的缓冲区中写到文件描述符fd所指向的文件中,

返回值为实际写入的字节数。

6、系统调用-定位

int lseek(int fd,offset_t offset,intwhence)

功能:

将文件读写指针相对whence移动offset个字节。

操作成功时,返回文件指针相对于文件头的位置(注意这里是文件头啊~~)

△:whence

可以使用下述值:

SEEK_SET:  相对文件开头

SEEK_CUR:  相对文件读写指针的当前位置

SEEK_END:  相对文件末尾

△:offset

offset可以取负值,表示向前移动。

例如:

lseek(fd,-5,SEEK_CUR)

调用可将文件指针相对当前位置向前移动5个字节。

7、系统调用-访问判断

有时我们需要判断文件是否可以进行某些操作(读、写等)~~

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!\n");

}

; w�_sa��pH�; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: rgb(0, 1, 70); ">功能:
从文件描述符fd所指向的文件中读取length个字节到buf所指向的缓冲区中,其中返回值为实际读取的字节数。
5、系统调用-写
int write(int fd,const void *buf,size_t length)
功能:
把length个字节从buf指向的缓冲区中写到文件描述符fd所指向的文件中,
返回值为实际写入的字节数。
6、系统调用-定位
int lseek(int fd,offset_t offset,int whence)
功能:
将文件读写指针相对whence移动offset个字节。
操作成功时,返回文件指针相对于文件头的位置(注意这里是文件头啊~~)
△:whence
可以使用下述值:
SEEK_SET:   相对文件开头
SEEK_CUR:   相对文件读写指针的当前位置
SEEK_END:   相对文件末尾
△:offset
offset可以取负值,表示向前移动。
例如:
lseek(fd,-5,SEEK_CUR)
调用可将文件指针相对当前位置向前移动5个字节。
7、系统调用-访问判断
有时我们需要判断文件是否可以进行某些操作(读、写等)~~
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!\n");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐