最近继续啃tlpi,第五章介绍了文件控制操作,fcntl()的使用,所以写了个小栗子试试看,结果和我预期的不一样。代码如下图:
主要就是以只读方式打开文件,然后判断是否可写,不可写的话,修改文件的访问模式为读写,最后write()随便写一点进去,问题是这么做最后还是不能写入。
#include <sys/stat.h>
#include <fcntl.h>
#include "tlpi_hdr.h"
int main(int argc, char *argv[]){
int fd,flags,accessMode,nflags;
fd = open("myfile",O_RDONLY);
if(fd == -1)
errExit("open");
flags = fcntl(fd,F_GETFL);
accessMode = flags & O_ACCMODE;
if(accessMode == O_WRONLY || accessMode == O_RDWR)
printf("File is writable!\n");
else{
printf("File is not writable\n");
printf("addWR...\n");
flags |= O_RDWR;
if(fcntl(fd,F_SETFL,flags) == -1) //F_SETFL会忽略对读写模式的修改操作
errExit("fcntl");
nflags = fcntl(fd,F_GETFL);
accessMode = nfla