标签:
open、read、write、lseek以及close
open、close函数
语法格式:
头文件:
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<unistd.h>
open函数:
int open(const char *pathname, flags, int perms);
pathname:被打开的文件名(可包含路径)
flag(打开方式):(常用方式)
O_RDONLY:只读方式
O_WRONLY:可写方式
O_RDWR:读写方式
O_CREATE:如果文件不存在,就创建一个新的文件,并用第三个参数为其设置权限
--------------------------------
O_EXCL:用于测试文件是否存在
O_TRUNC:如果文件已经存在,并且以只读或只写成功打开,那么会先全部删除文件中原有数据
O+APPEND:以添加的方式打开文件,打开时,文件指针指向文件的末尾
perms:被打开文件的存取权限,为8禁止表示法
flag参数可以通过"|"连接多个组合形式
返回值:
成功返回文件描述符,失败返回-1
close函数:
int close(int fd);
fd:文件描述符
返回值:
成功返回0,失败返回-1
如:mathod_01.c
#include <sys/types.h>
#include <unistd.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
#include <stdio.h>
int main(void){
int fd; //定义文件描述符
//调用open函数,以可读写的方式打开,使用“|”符号链接
if((fd=open("/home/my/myTest.c", O_CREATE | O_TRUNC | O_RDWR, 0666)) < 0){
perror("open:"); //打印出错信息
exit(1);
}else{
//注意:open函数返回的文件描述符一定是最小的未用文件描述符
printf("Open file:myTest.c %d\n", fd);
}
if(close(fd) <0){
perror("close:");
exit(1);
}else{
printf("Close myTest.c\n");
}
exit(0);
}
read、write及lseek函数
语法格式:
头文件
#include<unistd.h>
#include<sys/types.h>
read函数
ssize_t read(int fd, void *buf, size_t count);
fd:文件描述符
buf:指定存储器读出数据的缓冲区
count:指定读出的字节数
返回值:成功返回读到的字节数;0表示读到文件尾;-1表示出错
write函数
ssize_t write(int fd, void *buf, size_t count);
fd:文件描述符
buf:指定存储器写入数据的缓冲区
count:指定写入的字节数
返回值:成功,返回已写字节数;失败,返回-1
lseek函数
off_t lseek(int fd, off_t offset, int whence);
fd:文件描述符
offset:偏移量,每一读写操作所需要移动的距离,单位是字节的数量。可正(前移)可负(后移)
whence(当前位置的基点):
SEEK_SET:当前位置为文件的开头,新位置为便宜量的大小
SEEK_CUR:当前位置为文件指针的位置,新位置为当前位置加上偏移量
SEEK_END:当前位置为文件的结尾,新位置为文件的大小加上偏移量的大小
返回值:成功,返回当前位移;失败返回-1
如:method_02.c
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define MAXSIZE
int main(void){
int i, fd, size, len;
char *buf = "Hello! Welcom to Linux World!";
char buf_read[10];
len = strlen(buf);
//打开文件并制定权限
if((fd = open("/home/my/myTest.c", O_CREAT | O_TRUNC | O_RDWR, 666)) < 0 ){
perror("Open:");
exit(1);
}else{
printf("open file:myTest.c\n", fd);
}
//write函数将buf中的内容写入到打开的文件中
if((size = write(fd, buf, len)) < 0){
perror("write:");
exit(1);
}else{
printf("Write:%s\n", buf);
}
//调用lseek函数移动指针,并调用read读取文件
lseek(fd, 0, SEEK_SET);
if((size = read(fd, buf_read, 10)) < 0){
perror("read:");
exit(0);
}else{
printf("read from file:%s\n", buf_read);
}
//关闭close()
if(close(fd) < 0){
perror("close:");
exit(1);
}else{
printf("Close myTest.c\n");
}
exit(0);
}
fcntl函数:操作文件描述符的特性
函数格式
头文件
#include <sys/types.h>
#include <unistd.h>
#include <fcntl.h>
函数原型:
int fcntl(int fd, int cmd, struct flock *lock);
fd:文件描述符
cmd:(常见的有以下几个)
F_DUPFD:复制文件描述符
F_GETFL:得到open设置的标志
F_SETFL:改变open设置的标志
F_GETTFK:根据lock描述,决定是否上文件锁
F_SETFK:设置lock描述的文件锁
F_SETOWN:设置进程号或进程组号
lock:设置记录锁的具体状态
lock的结构:
struct flock{
short l_type; //取值:F_RDLCK(读取锁→共享锁)、F_WRLCK(写入锁→排斥锁)、F_UNLCK(解锁)
short l_start; //相对位移量(字节)
short l_whence;
off_t l_len; //加锁区域长度
pid_t l_pid;
}
返回值:成功,返回0,;失败返回-1
打开与关闭文件
函数格式定义
头文件
#include<stdio.h>
fopen、fdopen、freopen
FILE* fopen(const char* path, const char* mode);
FILE* fdopen(int fd, const char* mode);
FILE* freopen(const char* path, const char* mode, FILE* stream);
path:包含要打开的文件的路径及文件名
fd:要打开的文件描述符
mode:文件打开状态,取值:
r/rb:打开只读文件,文件必须存在
r+/r+b:打开可读写文件,文件必须存在
w/wb:打开只写文件,覆盖的方式(会清空存在的文件内容)
w+/w+b:打开可读写文件,覆盖的方式
a/ab:附加的当时打开只写文件,添加方式(在文件内容后添加内容)
a+/a+b:附加的当时打开读写文件,添加方式
stream:已打开的文件指针
返回值:成功,返回指向FILE的指针,失败返回NULL
关闭文件函数:fclose
格式:
int fclose(FILE* stream);
stream:已打开的文件指针
返回值:成功:0,失败:EOF
如:
#include<stdio.h>
int main(void){
FILE *fp;
//调用fopen函数
fp = fopen("/home/test/hello.c", "w");
if(fp != NULL){
printf("Open Success!");
}
//关闭文件指针
fclose(fp);
}
文件的读与写
头文件:
#include <stdio.h>
读文件:fread函数
格式:
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
ptr:存放读入记录的缓冲区
size:读取的记录大小
nmemb:读取的记录数
stream:要读取的文件流
返回值:成功,返回实际读到的nmemb,失败返回EOF
写文件:fwrite函数
格式
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
ptr:存放写入记录的缓冲区
size:写入的记录大小
nmemb:写入的记录数
stream:要写入的文件流
返回值:成功,返回实际写入的nmemb数目,失败返回EOF
如:
#include <stdio.h>
int main(void){
FILE *stream;
char str[5] = {‘H‘, ‘e‘, ‘l‘, ‘l‘, ‘o‘};
//先打开文件
stream = fopen("test", "w");
int number = fwrite(str, sizeof(char), nmemb, stream);
printf("number = %d", number);
//关闭文件流
fclose(stream);
}
标签:
原文地址:http://blog.csdn.net/djh_happy/article/details/51360191