joepayne 发表于 2012-12-07 17:05

solaris 打开文件返回的fd有问题

最近在solaris服务器上弄了一下共享内存相关测试用例,不知道在哪地方参数设置的系统的配置有影响,过后,再次运行程序一直出错。查了下,出错的地方在对open返回的fd的操作上,我把fd作为参数传递给那些诸如read write ftruncate 系统调用接口中,错误提示:
Bad file number   我把fd打印出来一看,竟然是3,正常情况下至少也得是4啊,如果是第一次打开文件的话。。。

在这个问题之前一会儿还有一个非常奇怪的现象,我并没有设置文件的默认权限,我在程序中创建一个文件后,它的默认权限竟然是5,ls -al 查看的时候竟然发现了 在用户权限的第三位设置了S。在找不到解决办法的情况下,无奈,只有将整个文件夹给删了。之后就写了上面的程序,程序中创建一文件,此时的默认权限才恢复原来的。但上面的问题又出现了???
望牛X的大哥们能指点一二!!!

我把我测试用例的相关代码贴出来,大侠们啾啾。嘿嘿   ^_^   ^_^
int fd=open("a.txt",0660|O_CREAT);
      if(fd==-1){
                perror("open");
                exit(-1);
      }
      int ret;
      printf("%d\n",fd);
//      ret=ftruncate(fd,4);
      lseek(fd,4,SEEK_SET);
      ret=write(fd,"",1);

mike79 发表于 2012-12-07 22:58

joepayne 发表于 2012-12-07 17:05 static/image/common/back.gif
正常情况下至少也得是4啊
为什么是4?
0是标准输入,1是标准输出,2是标准错误。接下来不就是3么

joepayne 发表于 2012-12-12 19:39


joepayne 发表于 2012-12-07 17:05
正常情况下至少也得是4啊

为什么是4?
0是标准输入,1是标准输出,2是标准错误。接下来不就是3么不知道   可能是平台的原因吧以前我在LINUX 平台上留意了这一问题现在在UNIX平台下   不过谢谢啦   问题解决了   嘿嘿我把open函数用错了
页: [1]
查看完整版本: solaris 打开文件返回的fd有问题