标签: file-descriptor

获取OS X中的打开文件(描述符)列表

我想在os x(10.9.1)的进程中获取一个打开文件的列表.在Linux中我能够从中获得/proc/PID/fd.但是我不确定如何在OS X上获得相同的结果.我发现OS X上没有procfs(默认情况下.可能的实现存在,但我不想那样).

那么我如何(在本机上)获取OS X上进程中打开文件的列表.一种方法是lsof.有没有其他支持?请告诉我在哪里可以获得更多相关信息.

谢谢.

macos file-descriptor procfs osx-mavericks

51
推荐指数
5
解决办法
5万
查看次数

获得分配最高的文件描述符

是否有可移植的方式(POSIX)来获取当前进程的最高分配文件描述符号?

我知道在AIX上有一个很好的方法来获取数字,但我正在寻找一种可移植的方法.

我问的原因是我想要关闭所有打开的文件描述符.我的程序是一个以root用户身份运行的服务器,为非root用户分叉和执行子程序.在子进程中保留特权文件描述符是一个安全问题.有些文件描述符可能是由我无法控制的代码(C库,第三方库等)打开的,所以我不能依赖它们FD_CLOEXEC.

posix file-descriptor

45
推荐指数
3
解决办法
2万
查看次数

如何检查存储在变量中的给定文件描述符是否仍然有效?

我有一个文件描述符存储在变量say var.如何在稍后阶段检查该描述符是否有效?

  fdvar1= open(.....);
  fdvar2 = fdvar1;       // Please ignore the bad design

  ....
  // lots of loops , conditionals and threads. It can call close(fdvar2) also.  
  ....

  if(CheckValid(fdvar1)) // How can I do this check  ?
    write(fdvar1, ....);
Run Code Online (Sandbox Code Playgroud)

现在我想检查var1(仍保留打开的描述符)是否仍然有效.任何API都是为了什么?

c linux gcc file-descriptor

44
推荐指数
4
解决办法
5万
查看次数

为什么选择在Linux中使用

我正在通过一个连续程序,我观察到他们在使用select()之前使用read().为什么这是必需的.为什么我们不能直接调用read()并检查它是否失败?另外,为什么我必须将文件描述符增加1并在我传递文件描述符集时传递它select()

例:

r=select(fd+1, &fds, NULL, NULL, &timeout); 其中fds已经具有fd的值

c linux file-descriptor select-syscall

37
推荐指数
2
解决办法
3万
查看次数

socket:打开文件太多(24)apache bench lighttpd

当我启动Apache Bench测试时:

ab -n 10000 -c 1300 http://domain.com/test.php

我收到错误:

socket:打开的文件太多(24)

当我改为'-c 1000'时它工作正常.

因为我可以有超过1000个并发用户,我想修复socket太多打开文件问题或增加参数.怎么做到这一点?

我在centos 5上使用lighttpd.

apache scalability lighttpd file-descriptor

35
推荐指数
1
解决办法
5万
查看次数

ftell文件描述符?

有没有办法在原始文件描述符而不是FILE*上执行ftell()所做的操作(返回文件中的当前位置)?我认为应该有,因为你可以使用lseek()在原始文件描述符上寻找.

我知道我可以使用fdopen()创建一个对应于文件描述符的FILE*,但我宁愿不这样做.

linux file-descriptor ftell file-pointer

34
推荐指数
1
解决办法
1万
查看次数

任何人都可以在fork()之后解释关于'文件描述符'的简单描述吗?

在"Unix环境中的高级编程",第2版,作者:W.Richard Stevens.

第8.3节fork函数.

这是描述:

父和子共享相同的文件偏移量很重要.

考虑一个分叉孩子的过程,然后等待孩子完成.假设两个进程都写入标准输出作为其正常处理的一部分.如果父级的标准输出重定向(可能是shell),则当子级写入标准输出时,子级必须更新父级的文件偏移量.

[1.这是什么意思?例如,如果父项的std输出被重定向到'file1',那么子项写入后子项应该更新什么?parent的原始std输出偏移量或重定向输出(即file1)偏移量?不能晚了,对吧?

[2.更新是如何完成的?由子显式,由OS隐式地,由文件描述符本身?在fork之后,我认为父母和孩子走自己的路,并拥有自己的文件描述符COPY.那么孩子如何更新偏移到父方?]

在这种情况下,孩子可以在父母等待时写入标准输出; 在孩子完成后,父母可以继续写入标准输出,知道其输出将附加到孩子写的任何内容.如果父级和子级没有共享相同的文件偏移量,则此类交互将更难以完成,并且需要父级的显式操作.

如果父节点和子节点都写入相同的描述符,而没有任何形式的同步,例如让父节点等待子节点,则它们的输出将被混合(假设它是在fork之前打开的描述符).虽然这是可能的,但这不是正常的操作模式.

在fork之后处理描述符有两种正常情况.

  1. 父母等待孩子完成.在这种情况下,父级不需要对其描述符执行任何操作.当子进程终止时,子进程读取或写入的任何共享描述符将相应地更新其文件偏移量.

  2. 父母和孩子都有自己的方式.这里,在fork之后,父关闭它不需要的描述符,并且子进行相同的操作.这样,既不会干扰对方的开放描述符.网络服务器经常出现这种情况."

[3.当调用fork()时,我理解的是那个子得到了父有什么的COPY,在这种情况下是文件描述符,并做了它的事情.如果任何偏移更改为父和子共享的文件描述符,则只能因为描述符记住偏移本身.我对吗?]

对不起,我对这些概念不太了解.

有帮助吗?谢谢.

c unix fork file-descriptor

33
推荐指数
2
解决办法
3万
查看次数

调用setDataSource(FileDescriptor)方法时出现异常(失败:状态= 0x80000000)

我正在开发一个视频流应用程序,并且在使用FileDescriptor调用set setDataSource时遇到困难.我希望我的应用程序在下载时播放视频,所以一旦我得到最小字节数,我将这些字节移动到另一个文件,这样它就可以在原始文件中下载时在另一个文件中播放.

所以,我检查一下我是否可以像这样启动每个数据包的媒体:

if (mediaPlayer == null) {
                    // Only create the MediaPlayer once we have the minimum
                    // buffered data
                    if (totalKbRead >= INTIAL_KB_BUFFER) {
                        try {
                            startMediaPlayer();
                        } catch (Exception e) {
                            Log.e(getClass().getName(),
                                    "Error copying buffered conent.", e);
                        }
                    }
                } else if (mediaPlayer.getDuration()
                        - mediaPlayer.getCurrentPosition() <= 1000) {
                    transferBufferToMediaPlayer();
                }
}
Run Code Online (Sandbox Code Playgroud)

这是startMediaPlayer方法代码:

private void startMediaPlayer() {
        try {
            File bufferedFile = new File(context.getCacheDir(), "playingMedia"
                    + (counter++) + ".dat");

            // bufferedFile is the one that'll be played
            moveFile(downloadingMediaFile, …
Run Code Online (Sandbox Code Playgroud)

android file-descriptor video-streaming media-player

31
推荐指数
2
解决办法
5万
查看次数

resque-web出错:无法获取引用控制台的文件描述符

我正在尝试启动resque-web,但是会发生以下错误:

[Sun Mar 06 05:27:48 +0000 2011] Starting 'resque-web'...
[Sun Mar 06 05:27:48 +0000 2011] trying port 8281...
Couldn't get a file descriptor referring to the console

Ubuntu 10.04和10.10发生此错误.

Resque Web仅以-F选项开头(不要守护进程,在前台运行).因此,当进程被守护时,它必须是某种东西.

任何想法,我该如何解决?

问候,

file-descriptor resque

31
推荐指数
1
解决办法
9334
查看次数

如何将子shell的输出文件描述符重定向到父shell中的输入文件描述符?

(在BASH中)我希望子shell使用非STDOUT非STDERR文件描述符将一些数据传递回父shell.我怎样才能做到这一点?最终我希望将数据保存到父shell的某个变量中.

(
  # The following two lines show the behavior of the subshell.
  # We cannot change them.
  echo "This should go to STDOUT"
  echo "This is the data I want to pass to the parent shell" >&3
)
#...
data_from_subshell=... # Somehow assign the value of &3 of the
                       # subshell to this variable
Run Code Online (Sandbox Code Playgroud)

编辑:子shell运行一个写入STDOUT和&3的黑盒程序.

bash shell file-descriptor

29
推荐指数
2
解决办法
3万
查看次数