- open
int open(const char *pathname, int flags, mode_t mode);
flags :
O_CREAT :创建文件
O_EXCL :必须和O_CREAT一起使用,表示如果文件不存在就创建,如果文件存在就失败
O_APPEND:追加
O_RDWR
O_RDONLY
O_RWONLY
注意:
创建文件时,权限会受到umask的影响
实际创建文件权限 mode = mode & ~umask
如果创建的文件不想被umask影响,可以通过系统提供的umask函数来更改
// 更改umask值
mode_t umask(mode_t mask);
注释:当设置新 mask值时,则会返回旧mask值
…
代码:
#include <errno.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
extern int errno;
#define ERR_EXIT(msg) \
do { \
fprintf(stderr, "[%s][%d] %s : %s\n",__FILE__,__LINE__,\
msg,strerror(errno)); \
exit(EXIT_FAILURE); \
}while ( 0 )
int main( void )
{
int fd = -1;
/*设置新mask值为 0 并返回旧 mask 值*/
mode_t oldmask = umask(0);
if (-1 == (fd=open("b.txt", O_RDWR|O_CREAT|O_EXCL,0777)) )
{
if ( errno == EEXIST ) {
printf("文件已经存在,只能打开!\n");
if ( -1 == (fd=open("b.txt", O_RDWR)) )
ERR_EXIT("open");
} else
ERR_EXIT("open");
}
/*设置旧mask值*/
umask(oldmask);
printf("create file ok\n");
close(fd);
}
- lseek