创建并打开返回两个不同的fd描述符

时间:2014-01-23 11:56:17

标签: c

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);

2 个答案:

答案 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()正常工作。