赞
踩
- 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):关闭文件。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。