2

我写了 LD_PRELOAD 来拦截 accept() 函数。我有一个问题,因为有时接受函数给了我相同的文件描述符。我只为一个进程加载这个预加载

我的代码:

int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen)
{
 int fd;
 fd = (*realAccept)(sockfd, addr, addrlen);
 if(fd >= 0)
 {
  printf("file descriptor: %d\n", fd);
  ...
  return fd;
 }
}

int close(int fd)
{
 printf("close decriptor: %d\n", fd);
 return (*realClose)(fd);
}

输出是:

文件描述符:213

文件描述符:213 <-- 为什么?

...

关闭描述符:213

为什么接受函数返回相同的文件描述符?

谢谢!

4

1 回答 1

0

我敢打赌,这是由于stdout. 也许还有其他一些线程在使用它......这增加了您没有包含结尾的事实\n可能会导致输出中出现重复的行。

如果您想确定,请\n在字符串末尾添加 ,并fflush(stdout)在每次调用printf().

于 2012-07-09T10:36:00.430 回答