转载: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()
{
}