标签: file-descriptor

将 stderr 从 python 的 exec-ed 进程重定向到 stdout?

在 bash 脚本中,我可以编写:

exec 2>&1
exec someprog
Run Code Online (Sandbox Code Playgroud)

并且 stderr 输出someprog将被重定向到 stdout。

有没有办法使用 python 的os.exec*函数来做类似的事情?

这不必是可移植的,只需在 Linux 上工作即可。

python linux redirect file-descriptor

3
推荐指数
1
解决办法
1546
查看次数

java程序中的文件描述符泄漏:打开的文件太多

我有一个程序受到文件描述符增加的影响。当我执行命令 ls -l /proc/5969/fd 时,我看到其中 5969 是 java 程序的 pid 文件描述符的数量不断增加。但我无法打开其中一个文件描述符以查看哪些文件保持打开状态:以下是列表示例:

lrwx------ 1 root root 64 oct 24 16:08 52295 -> socket:[2577706264]
lrwx------ 1 root root 64 oct 24 16:08 52296 -> socket:[2579543392]
lrwx------ 1 root root 64 oct 24 16:08 52297 -> socket:[2578760962]
Run Code Online (Sandbox Code Playgroud)

请帮助我找到解决此文件描述符泄漏的方法,了解哪些文件保持打开状态并增加文件描述符数量。

java memory-leaks file file-descriptor

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

列出 Windows 中打开文件句柄的所有者进程?

我目前在程序的事件查看器中收到“句柄不足”错误。

列出哪些进程正在使用文件句柄的好程序是什么?

一个例子是 *nix 世界中的 'lsof'。

windows file-descriptor

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

使用文件描述符读取 C 中的文件

我想通过使用文件描述符来读取文件。由于分配规则,我无法使用它的名称。

我通过打电话获得它open并且工作正常。此时我知道我必须使用该read()函数才能读取它。我的问题是该read()函数需要作为参数读取的字节数,并且我想每次从文件中读取整行,所以我不知道要读取多少字节。

例如,如果我使用fscanf(),它可以很好地处理一个简单的字符串,并且我可以根据需要收回整行。所以我的问题是:

是否有类似的函数fscanf()可以使用文件描述符而不是文件指针来调用?

c file file-descriptor

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

write(): 错误的文件描述符

我正在尝试学习 POSIX 中的基本 IO 函数,我编写了以下代码,但它不起作用,并且当我尝试执行代码时返回“错误的文件描述符”错误:

#include <stdio.h>
#include <stdlib.h>

#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>

int main(void)
{

    int nfd;
    ssize_t ret;

    mode_t mode = S_IRWXU | S_IRWXG;

    nfd = openat(AT_FDCWD, "idx.txt", O_APPEND | O_SYNC | O_CREAT, mode);

    if (-1 == nfd)
    {
        perror("openat()");
        exit(EXIT_FAILURE);
    }

    ret = write(nfd, "HELLO", 5);

    if (-1 == ret)
    {
        perror("write()");
        exit(EXIT_FAILURE);
    }

    close(nfd);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我想以 O_APPEND 模式写入文件。但:

$ touch idx.txt # it does not work even if the file does not …
Run Code Online (Sandbox Code Playgroud)

c posix file-descriptor

3
推荐指数
1
解决办法
2864
查看次数

有没有办法让文件大小只有FileDescriptor?

我们假设我有一个有效的Java FileDescriptor,我用这种方式:

FileInputStream is = new FileInputStream("/some/path/to/file.txt");
FileDescriptor fd = is.getFD();
Run Code Online (Sandbox Code Playgroud)

现在请忘记我知道文件路径.我唯一拥有的是一个FileDescriptor.有没有一种简单的方法来了解文件大小?现在我检查过:

  1. FileDescriptorvalid()方法可以告诉我它是否有效但没有length()size()功能.
  2. FileInputStream 不返回路径,因为它是一个流,它显然不会告诉我文件大小.
  3. File(http://docs.oracle.com/javase/7/docs/api/java/io/File.html)其中有length()方法没有能够处理FileDescriptor的构造函数.

我知道我可以阅读整个流并总结长度,但我不认为它是简单的方法.

java file file-descriptor

3
推荐指数
1
解决办法
1273
查看次数

使用 exec 打开管道挂起

我想打开一个文件描述符仅供阅读

mkfifo my_fifo
exec 3<$my_fifo
Run Code Online (Sandbox Code Playgroud)

这个挂了。

另一方面,当我做

exec 3<>$my_fifo
Run Code Online (Sandbox Code Playgroud)

然后它起作用了。为什么?

bash file-descriptor

3
推荐指数
1
解决办法
247
查看次数

是一个文件描述符,它的进程是本地的,也是Unix上的全局文

int fd = socket(//arguments);
Run Code Online (Sandbox Code Playgroud)

这个描述符是否可以通过IPC传递给另一个进程并且仍然有效,或者它是创建它的进程的本地?

c unix file-descriptor

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

如何实现将子进程的标准输出重定向到文件?

我正在用 Rust 编写的 shell 中实现 I/O 重定向。我通过使用带有原始文件描述符和pipe()libc crate 的不安全代码成功地在两个子进程之间进行管道传输。

当我尝试将stdout最后一个子进程重定向到我有权访问的文件时,它失败了:

extern crate libc;
use std::process::{Command, Stdio};
use std::os::unix::io::{FromRawFd, IntoRawFd};
use std::fs::File;
use self::libc::c_int;

fn main() {
    let mut fds = [-1 as c_int, -1 as c_int];
    let fd1 = File::open("test1").unwrap().into_raw_fd();
    let fd2 = File::open("test2").unwrap().into_raw_fd();
    let fd3 = File::open("test3").unwrap().into_raw_fd();
    println!("{:?}, {:?}, {:?}", fd1, fd2, fd3);
    unsafe {
        libc::pipe(&mut fds[0] as *mut c_int);
        let cmd1 = Command::new("ls")
            .arg("/")
            .stdout(Stdio::from_raw_fd(fds[1]))
            .spawn()
            .unwrap();
        let mut cmd2 = Command::new("grep")
            .arg("etc")
            .stdin(Stdio::from_raw_fd(fds[0])) …
Run Code Online (Sandbox Code Playgroud)

file-descriptor libc rust

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

protofile.proto:池中已存在同名文件

具有以下结构:

- project1
  - project1.py
  - protofile_pb2.py
  - protofile_pb2_grpc.py
- project2
  - project2.py
  - protofile_pb2.py
  - protofile_pb2_grpc.py
Run Code Online (Sandbox Code Playgroud)

项目1.py:

- project1
  - project1.py
  - protofile_pb2.py
  - protofile_pb2_grpc.py
- project2
  - project2.py
  - protofile_pb2.py
  - protofile_pb2_grpc.py
Run Code Online (Sandbox Code Playgroud)

项目2.py:

import protofile_pb2.py
...
Run Code Online (Sandbox Code Playgroud)

运行 project2.py 时,出现此错误:

import protofile_pb2
import project1
...
Run Code Online (Sandbox Code Playgroud)

python file-descriptor protocol-buffers grpc

3
推荐指数
3
解决办法
4877
查看次数

标签 统计

file-descriptor ×10

c ×3

file ×3

java ×2

python ×2

bash ×1

grpc ×1

libc ×1

linux ×1

memory-leaks ×1

posix ×1

protocol-buffers ×1

redirect ×1

rust ×1

unix ×1

windows ×1