stderr ?= stdout

Sam Steingold sds@gnu.org
Wed Jan 12 21:28:00 GMT 2005


How do I check whether stdout==stderr or not?
e.g., I want to distinguish between these situations:
$ foo
$ foo > log
$ foo 1>log1 2>log2



  struct stat statbuf1;
  struct stat statbuf2;
  fstat(handle1,&statbuf1)
  fstat(handle2,&statbuf2)
  if (statbuf1.st_dev == statbuf2.st_dev
     && statbuf1.st_ino == statbuf2.st_ino) {
    /* handle1 and handle2 point to the same inode. */
    if ((S_ISREG(statbuf1.st_mode) || S_ISBLK(statbuf1.st_mode))
        && (S_ISREG(statbuf2.st_mode) || S_ISBLK(statbuf2.st_mode))) {
      /* handle1 and handle2 are exchangeable only if they are positioned
         at the same file position. */
      off_t pos1 = lseek(handle1,0,SEEK_CUR);
      if (pos1 >= 0) {
        off_t pos2 = lseek(handle2,0,SEEK_CUR);
        if (pos2 >= 0) 
          return (pos1 == pos2);
      }
    }
    return true;
  } else 
    return false;
 
alas, the current cygwin reports different inodes for stdout and stderr:
  -437397064 and 593767114
so, what is the right way to check that two FDs refer to the
same device?

Thanks!

-- 
Sam Steingold (http://www.podval.org/~sds) running w2k
<http://www.camera.org> <http://www.iris.org.il> <http://www.memri.org/>
<http://www.mideasttruth.com/> <http://www.honestreporting.com>
Beliefs divide, doubts unite.

--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Problem reports:       http://cygwin.com/problems.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/



More information about the Cygwin mailing list