UNIX环境高级编程-open参数

#include <fcntl.h>
int open(const char * pathname,int oflag,.../*mode_t mode*/);
oflag可被设置为:
O_RDONLY:只读打开;
O_WRONLY:只写打开;
O_RDWR:读写打开;


O_APPEND:每次写时都追加到文件的尾端;
O_CREAT:若文件不存在则创建它,使用此选项时,需要第三个参数mode,设置权限;
O_EXCL:如果同时制定了O_CREAT,则文件已经出现时,则会出错;
O_TRUNC:如果文件存在,而且为只写和读写成功打开,则将其长度截断为0;


#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>
#include <errno.h>


int main()
{
int fd;
umask(0000);

//1、if((fd = open("test.txt",O_WRONLY | O_CREAT,0777)) == -1)
//2、if((fd = open("test.txt",O_WRONLY | O_CREAT | O_EXCL,0777)) == -1)
//3、if((fd = open("test.txt",O_WRONLY | O_CREAT | O_TRUNC,0777)) == -1)
//4、if((fd = open("test.txt",O_WRONLY | O_TRUNC,0777)) == -1)
if((fd = open("test.txt",O_WRONLY | O_CREAT |O_EXCL | O_TRUNC,0777)) == -1)
{
perror("open");
exit(1);
}
else
printf("success\n");
close(fd);
return 0;
}


如果使用语句1,则首次执行该程序的可执行文件时,会创建文件test.txt文件,不删除test.txt文件,再次执行,则创建新文件不成功,但是也未向用户返回任何错误信息;(第二次执行时,将mode改为0775,重新编译执行,然后使用ls -l查看文件权限来确定文件是否被重新创建)


如果使用语句2,则首次执行该程序的可执行文件时,会创建文件test.txt文件,不删除test.txt文件,再次执行,则创建新文件不成功,但是会向用户返回错误信息:open:file exist;


如果使用语句3,则首次执行该程序的可执行文件时,会创建文件test.txt文件,不删除test.txt文件,并向test.txt文件中写入hello world!字符,再次执行,则test.txt中的字符被删除,test.txt变为空文件,但是test.txt的文件权限未改,仍是首次创建文件时赋予的文件权限;


如果使用语句4,如果test.txt文件已存在,则将文件中的字符删除,test.txt变为空文件,但是test.txt的文件权限未变;


如果使用语句5,如果test.txt文件已存在,则会返回错误,因为O_EXCL;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值