标签: file-descriptor

你能解释一下这个C代码吗?(创建一个deamon程序)

我想好好理解以下代码:

/* Become deamon + unstoppable and no zombies children (= no wait()) */

if(fork() != 0)  return 0;        /* Parent returns OK to shell */
signal(SIGCLD, SIG_IGN);          /* ignore child death */
signal(SIGHUP, SIG_IGN);          /* ignore terminal hangups */
for(i = 0; i < 32; i++) close(i); /* close open files */
setpgrp();                        /* break away from process group */
Run Code Online (Sandbox Code Playgroud)

以下是我对上述代码的理解:

第1行:创建子进程并终止父进程,因此父进程将返回到shell,子进程将继续在后台执行该程序.

第二行:当子进程(执行程序的用户)终止时,忽略应该发送到父进程(谁控制终端)的信号.我觉得这条线会避免僵尸孩子的发生吗?

第3行:我读到它忽略了POSIX的挂断,我不确定它到底是什么.

第4行:关闭描述符文件为0到31的打开文件(我不知道为什么从0到31)

第5行:不知道它做了什么.


能帮我理解一下这段代码吗?提前致谢 :)

c linux signals process file-descriptor

2
推荐指数
1
解决办法
397
查看次数

使用write将整数写入文件描述符?

我想使用write(http://linux.about.com/library/cmd/blcmdl2_write.htm)将整数1写入第一个字节,将0x35写入文件描述符的第二个字节,但是当我发送时会收到以下警告尝试以下方法:

write(fd, 1, 1);
write(fd, 0x35, 1);


source.c:29: warning: passing argument 2 of ‘write’ makes pointer from integer without a cast
source.c:30: warning: passing argument 2 of ‘write’ makes pointer from integer without a cast
Run Code Online (Sandbox Code Playgroud)

c unix file-descriptor

2
推荐指数
1
解决办法
8604
查看次数

当进程在Linux中终止时,文件描述符是否已关闭?

Linux(Ubuntu)中有一个进程可以打开一个文件进行读取但不会故意关闭它.当进程终止时,操作系统是否自动关闭文件描述符?

我的具体情况是在Rails应用程序中,我打开一个二进制文件.我的Web服务器产生多个Rails进程.该文件在每个Rails进程中从单例打开.我需要知道当Rails进程终止时是否自动关闭此二进制文件.

linux process file-descriptor ruby-on-rails-3

2
推荐指数
1
解决办法
1664
查看次数

Bash,使用文件描述符覆盖?

如果你想用Bash覆盖一个文件,这很容易

echo "Hello world" > hosts
Run Code Online (Sandbox Code Playgroud)

这似乎不适用于文件描述符

$ exec 3<> hosts

$ echo "Hello world" >&3
$ cat hosts
Hello world

$ echo "Hello world" >&3
$ cat hosts
Hello world
Hello world
Run Code Online (Sandbox Code Playgroud)

bash file-descriptor io-redirection

2
推荐指数
1
解决办法
931
查看次数

2
推荐指数
1
解决办法
3626
查看次数

什么可能导致多线程环境中的"错误的文件描述符"?

这个问题在某种程度上类似于Bad文件描述符,但它根本不相同.我知道这是"糟糕的问题"(可能是"过于本地化"),但我无法理解,现在我已经没有任何想法.


介绍

我有一个经理线程,启动75个其他线程.这些线程中的每一个都做了很多事情,所以我只描述相关的线程.

请注意:如果我只启动几个线程 - 例如3或5或10,则不会出现此错误!这让我觉得,这是一些多线程问题,但它似乎并不是这样的.你会在下一节中看到原因.

所以,在以下2个案例中,有时我收到此错误Bad file descriptor:


情况1

错误出现在 TinyXML

有一个xml文件,所有线程都需要它.所有这些线程都TinyXML用于解析文件.所有这些线程都只使用此文件!(我知道这可以优化,但无论如何).

因此,导致Bad file descriptor错误的代码是:

// ...
// NOTE: this is LOCAL, other threads do NOT have access to it
TiXmlDocument   doc;
doc.LoadFile( filename );

// and here's the LoadFile:
bool TiXmlDocument::LoadFile( const char* _filename, TiXmlEncoding encoding )
{
    //...
    FILE* file = fopen( value.c_str (), "rb" ); 
    if ( file )
    {
        // this IS …
Run Code Online (Sandbox Code Playgroud)

c c++ linux posix file-descriptor

2
推荐指数
1
解决办法
8796
查看次数

os.close(0)和sys.stdin.close()之间的区别

我正在处理一些Python代码,这是从Apache调用的CGI脚本。

代码要做的第一件事是(我相信)尝试使用以下命令关闭stdin / stdout / stderr:

    for fd in [0, 1, 2]:
    try:
        os.close(fd)
    except Exception:
        pass
Run Code Online (Sandbox Code Playgroud)

通常,这可以正常工作,但是,如果它们没有打开,则会出现“ python.exe已停止工作”,“导致程序无法正常工作的问题”错误消息(Win32异常)。

几个问题:

  • 通过os.close(descriptor number)和sys.stdin.close()等关闭之间有什么区别?
  • 假设我应该通过两种机制关闭,如何检查描述符是否真正打开(即,调用os.close不会导致Python崩溃)

python stdin cgi file-descriptor sys

2
推荐指数
1
解决办法
4198
查看次数

Android文件描述符泄漏debuging

我公司有很多ui测试,可以在虚拟/真实设备上运行.运行一段时间之后测试随机崩溃,我认为这是文件描述符超出的结果:我用过

ls /proc/${PID}/fd | wc -llsof -p ${PID} 但它并没有帮助了很多-最lsof命令行的样子:

30015    u0_a104  678      sock                                    859560 socket:[859560]
30015    u0_a104  679      0000                0,8                 4539 anon_inode:[eventpoll]
30015    u0_a104  680      0000                0,8                 4539 anon_inode:[eventfd]
30015    u0_a104  681      0000                0,8                 4539 anon_inode:[eventfd]
30015    u0_a104  682      0000                0,8                 4539 anon_inode:[eventpoll]
30015    u0_a104  683      0000                0,8                 4539 anon_inode:[eventfd]
30015    u0_a104  684      0000                0,8                 4539 anon_inode:[eventpoll]
30015    u0_a104  685      0000                0,8                 4539 anon_inode:[eventfd]
Run Code Online (Sandbox Code Playgroud)

所以我的问题是:是否有任何android/java/linux instruments/utils找到泄漏

PS System.gc()没有帮助

java android file-descriptor linux-kernel

2
推荐指数
1
解决办法
2285
查看次数

在线程之间转发/传递文件描述符

我有一个任务,我在一个线程中等待连接并将它们转发到另一个线程.也许我有些误解,但为什么我不能在主线程中重新打开文件描述符?

非常简化的代码:

sub inthread {
    $socket = new IO::Socket::INET ( ... );
    # ...
    while ( my $client = $socket->accept() ) {
       #if i print STDOUT, (fileno $client); # there i'll get 4
       push ( @shared, fileno $client);
    }
}


sub mainthread {
   if ( scalar @shared ) {
      $fd = shift @shared;
      # if i print (fileno $fd); # there i'll get 4
      open my $f, "<&=$fd" or die " error $!"; ### error here: Can't open 4: Bad …
Run Code Online (Sandbox Code Playgroud)

perl multithreading file-descriptor shared-objects

2
推荐指数
1
解决办法
263
查看次数

为什么在bash while循环中使用“ &lt;&3”,“ 3&-”和“ 3 &lt;/ file”?它实际上是做什么的?

我正在研究一个bash脚本,试图弄清楚它的工作方式并可能对其进行修补。有问题的脚本是这个 cryptroot从负责在开机解密块设备Debian的脚本。不能完全在家中进行bash肯定会带来挑战。

我找到了这段代码,但不确定它是做什么的。

if [ -r /conf/conf.d/cryptroot ]; then
    while read mapping <&3; do
        setup_mapping "$mapping" 3<&-
    done 3< /conf/conf.d/cryptroot
fi
Run Code Online (Sandbox Code Playgroud)

我的猜测是,它将读取每一行/conf/conf.d/cryptroot并将其传递给setup_mapping。但是我不太了解,以及的意义<&3,意义3&-以及作用3</conf/conf.d/cryptroot是什么?

当我从文件中读取行时,通常会执行以下操作:

while read LINE
    do COMMAND
done < FILE
Run Code Online (Sandbox Code Playgroud)

在while循环中将的输出FILE定向到的位置readCOMMAND直到最后一行为止。

我也对重定向有所了解,例如,有时我会用它来重定向STDOUTSTDERR诸如此类/dev/null的东西。但是我不确定重定向的3含义。

根据tldp.org的介绍,在阅读了有关I / O重定向的更多知识之后,我已经接近答案了。

stdin,stdout和stderr的文件描述符分别为0、1和2。要打开其他文件,请保留描述符3到9。

因此3是“仅”对打开文件的引用,或:

...只是操作系统分配给打开文件以跟踪它的数字。考虑它是文件指针的简化类型。

因此,据我了解:

  • 3< /conf/conf.d/cryptroot打开/conf/conf.d/cryptroot读取并将其分配给文件描述符3。
  • read mapping <&3似乎是从读文件描述符3,它指向打开文件的第一行/conf/conf.d/cryptroot …

bash file-descriptor while-loop io-redirection

2
推荐指数
1
解决办法
40
查看次数