int open(const char *pathname,int flags);
int open(const char *pathname,int flags,mode_t mode);
open函数返回的是一个文件描述符,打印出来的值为非负整数。(文件描述符类似于索引)
pathname:要打开的文件名。
flags:打开方式有:O_RDONLY(只读打开),O_WRONLY(只写打开),O_RDWR(可读可写打开)。
以上参数只能指定一个,下列参数是可选择的:
O_CREAT 若文件不存在则创建它。使用此选项时,需要同时说明第三个参数mode,用其说明该新文件的存取许可权限。
O_EXCL 如果同时指定了OCREAT,而文件已经存在,则出错。
O_APPEND 每次写时都加到文件的尾端。
O_TRUNC 属性去打开文件时,如果这个文件中本来是有内容的,而且为只读或只写成功打开,则将其长度截短为0。
mode:一定是在flags使用了O_CREAT标志,mode记录待创建的文件的访问权限。
使用该函数需要包含头文件
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
先来看代码
int main()
{
int fd;
fd=open("./file1",O_RDWR);
printf("fd=%d\n",fd);
return 0;
}
如果file1存在的话,返回的是一个非负整数,如果file1不在的话就返回一个负数,经过测试该负数的值为-1。
int main()
{
int fd;
fd=open("./file1",O_RDWR);
if(fd==-1){
printf("open file1 failed\n");
fd=open("./file1",O_RDWR|O_CREAT,0600);
if(fd>0){
printf("create file1\n");
}
}
return 0;
}
如果file1不存在的话,可以用第二个open函数来创建文件,需加上|0_CREAT,0600指的是可读可写。
int main()
{
int fd;
char *buf="Hello World";
fd=open("./file1",O_RDWR|O_CREAT|O_EXCL,0600);
printf("%d",fd);
close(fd);
return 0;
}
如果文件存在值输出-1,这是因为加了O_CREAT|O_EXCL。
int main()
{
int fd;
char *buf="Hello World";
fd=open("./file1",O_RDWR|O_APPEND,0600);
printf("open sucess:fd=%d\n",fd);
int n_write=write(fd,buf,strlen(buf));
if(n_write!=-1){
printf("write %d byte to file\n",n_write);
}
close(fd);
return 0;
}
使用O_APPEND,如果原文件有内容,则在下一行写入内容。
int main()
{
int fd;
char *buf="Hello Worldi1";
fd=open("./file1",O_RDWR|O_TRUNC,0600);
printf("open sucess:fd=%d\n",fd);
int n_write=write(fd,buf,strlen(buf));
if(n_write!=-1){
printf("write %d byte to file\n",n_write);
}
close(fd);
return 0;
}
使用O_TRUNC,如果原文件有内容,则会先清空内容,再写入内容。
2.API函数之write
ssize_t write(int fd,const void *buf,size_t count);
成功是话write返回的是写入的个数。
字符串buf读取count个字节存放在fd文件描述符中指向的文件里。
使用该函数需包含文件
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
int main()
{
int fd;
char *buf="Hello World";
fd=open("./file1",O_RDWR);
if(fd==-1){
printf("open file1 failed\n");
fd=open("./file1",O_RDWR|O_CREAT,0600);
if(fd>0){
printf("create file1\n");
}
}
printf("open sucess:fd=%d\n",fd);
write(fd,buf,strlen(buf));
close(fd);
return 0;
}
计算长度用strlen,sizeof计算的是but的大小,strlen计算的是buf内容的有效长度。
close(fd):关闭文件。