if((fd = creat(file_name,O_RDWR|S_IRWXU|S_IRWXG|S_IRWXO)) < 0){
perror("Create failed!");
return -1;
}
if((fd = open(file_name,O_CREAT | O_RDWR))< 0){
perror("Open failed!");
return -1;
}
write(fd,buff,100);
为什么fd&c在创建和打开方面有所不同,因为它打开了同一个文件。 我想创建,打开和写一个文件。
我不应该使用open(filename,O_CREAT|modes);
答案 0 :(得分:1)
creat
功能会在创建文件后打开该文件,因此,根据您的说明,只需拨打creat()
即可满足您的需求。
要回答你的问题,它会为你提供多个文件描述符,因为你已经执行了多次打开(creat是一个带有创建的打开)。您可以使用两个描述符访问同一文件(并且文件中的当前位置可能因每个描述符而不同)。
答案 1 :(得分:1)
字面上的creat()函数等效于open(pathname,O_RWONLY | O_CREAT | O_TRUNCATE,mode),因此你的第二个open()是多余的。 您还应该记住,fd只是当前进程的处理程序。不同的处理程序可能指向我们称之为“文件共享”的同一文件。 另一个建议是,试试
if (write(fd, buff, 100) != 100)
/*Error handling codes*/
确保write()正常工作。