标签: file-descriptor

在C中是否有用于读/写系统调用的标准输入/输出宏?

我的所有搜索都没有返回任何内容,我觉得很奇怪,没有任何宏可用作标准输入和输出的读/写系统调用的文件描述符,而不是0(stdout)和1(stdin).

我错过了他们还是他们真的不存在?

c macros file-descriptor system-calls

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

如何查看文件句柄,如"lsof -l"?

我做了命令(来源):

$ exec 3>/tmp/thirdfile
$ exec 4>/tmp/fourthfile
$ echo drib >&3
$ echo drab >&4
$ echo another drib >&3
$ echo another drab >&4
$ exec 3>&-
$ exec 4>&-
Run Code Online (Sandbox Code Playgroud)

我怎样才能看到文件句柄,类似于lsof -l

unix file-descriptor file-handling

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

使用Python Twisted with File Descriptors的示例

我希望使用twisted来控制主进程和一组从进程之间的Linux管道(os.pipe())和fifos(os.mkfifo())之间的通信.虽然我很肯定,但是对于这些类型的文件描述符可以使用twisted(毕竟,对于*nix作为文件描述符抽象的tcp套接字,twisted是很好的),我找不到任何这种用法的例子.任何人有任何链接,示例代码或建议?

python pipe twisted file-descriptor mkfifo

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

关于STDIN STDOUT STDERR的问题

我正在用c ++设计MIPS模拟器,我的简化操作系统必须能够偶尔运行stat()(当我的模拟器上执行的程序需要输入或输出时).

问题是,我需要能够将STDIN,STDOUT和STDERR作为参数提供给stat"stat("stdin",buff)"其中buff是指向插入点的指针,对于返回的结构数据,在内存中.实际上我将使用fstat(),它使用文件描述符指向要统计的文件.我的简单操作系统中的文件描述符表为stdin,stdout和stderr保留0,1和2.我对STDIN等有些困惑.它们是流,我意识到,它们是在stdio.h中定义的,但是我在世界上如何获得一个stat结构,其中包含有关每个流的文件的所有相关信息?

c++ statistics file-descriptor stream

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

Linux套接字的文件描述符总是按递增顺序排列

我在C/linux中有一个套接字服务器.每次我创建一个新套接字时,都会为其分配一个文件描述符.我想将这些FD用作每个客户端的唯一ID.如果保证它们总是按递增顺序分配(我正在运行的Ubuntu就是这种情况)那么我可以将它们用作数组索引.

所以问题是:从linux套接字分配的文件描述符是否始终保持递增顺序?

sockets linux file-descriptor

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

是否可以故意重新使用左开口插座?

我正在使用PHP套接字扩展(基本上是socket(2)相关的linux系统调用的包装器),并希望重新使用我在后续服务中提供一个请求时打开的套接字.性能是一个关键因素.

我打开的套接字都是相同的IP,这使得其他功能的使用pfsockopen()变得不可能(因为它每次都重复使用相同的单个套接字),我一次需要几个.

这个问题

如果我离开套接字,我打开服务一个请求故意打开,(我不打电话socket_close()socket_shutdown())并将具有完全相同参数的套接字连接到服务于下一个请求的同一IP; linux会重新使用以前打开的socket/file-descriptor吗?

我最终想做的是避免每次请求都有TCP握手.

其他信息:

  • 我使用apache worker MPM - 这意味着不同的请求可以但不一定是来自不同的进程.为简单起见,我们假设所有请求都来自同一个进程.

  • 我可以在PHP中获取打开并连接的套接字的文件描述符ID.我可以打开,读取和写入/dev/fd/{$id},但没有任何目的 - 它不与远程服务器通信(也许这是一种天真的方法).如果有人知道如何完成这项工作,我认为这也是一个可以接受的答案.

php sockets linux tcp file-descriptor

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

无法理解select()系统调用

我正在使用FIFO和select()系统命令运行测试.这个想法是:

  1. 进程1应该使用select()命令等待来自FIFO的消息
  2. 如果没有消息进来,进程一应该每5秒唤醒并说"还没有"
  3. 如果有消息进入,它应该唤醒,打印消息,然后终止

所以这里是代码注意我正在进行错误检查以节省空间:

//process 1's code
int main()
{
  int fd, ret;
  fd_set rfds;
  char buffer[100] = {0}; 
  char * myfifo = "/tmp/myfifo";
  struct timeval tv;

  tv.tv_sec = 5;  // 5 second sleep
  tv.tv_usec = 0;

  mkfifo(myfifo, 0666); //Make the fifo

  fd = open(myfifo, O_RDONLY);
  FD_ZERO(&rfds);    // clear the flags
  FD_SET(fd, &rfds); // set "read" on fd

  while((ret = select(fd+1, &rfds, NULL, NULL, &tv)) <= 0) //should be 1 when we're ready …
Run Code Online (Sandbox Code Playgroud)

c linux posix file-descriptor fifo

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

fcntl()和F_GETFL:奇怪的结果

上下文

我是一个自学者,今天我的第一个套接字用c代码工作.高兴.

问题

假设我们有sfd一个套接字文件描述符.

执行此代码时:

flags = fcntl (sfd, F_GETFL, 0);
printf("FD MODE 1 - %d\n",fcntl(sfd,F_GETFL));
flags |= O_NONBLOCK;
s = fcntl (sfd, F_SETFL, flags);
printf("FD MODE 2 - %d\n",fcntl(sfd,F_GETFL));
Run Code Online (Sandbox Code Playgroud)

它输出:

2
2050
Run Code Online (Sandbox Code Playgroud)

但是我的fcntl-linux.h说:

...
/* open/fcntl.  */
#define O_ACCMODE      0003
#define O_RDONLY         00
#define O_WRONLY         01
#define O_RDWR           02
#ifndef O_CREAT
# define O_CREAT       0100 /* Not fcntl.  */
#endif
#ifndef O_EXCL
# define O_EXCL        0200 /* Not fcntl.  */
#endif
#ifndef O_NOCTTY
# define O_NOCTTY      0400 …
Run Code Online (Sandbox Code Playgroud)

c sockets file-descriptor

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

Zsh管道输出到命令

在Zsh中,我知道您可以command &> file.txt所有文件描述符传递给file.txt(而不是像单独使用command 2>&1 3>&1 > file.txt三个文件描述符那样单独执行每个文件描述符).有没有办法将所有文件描述符传递给另一个命令?如command <mystery operator> cat

编辑:我错了,正如Chepner和Etan指出的那样; &>只重定向fd的1和2.谢谢!

bash shell zsh file-descriptor

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

封闭文件描述符发生了什么?

在下面的示例代码中,我们打开一个文件描述符到sandbox.log,将它作为stdout提供给子进程,然后关闭文件描述符,但子进程仍然可以写入该文件.是subprocess.Popen在内部复制文件描述符吗?将文件描述符传递给子进程后关闭它是否安全?

import subprocess
import os
import time


print 'create or clear sandbox.log'
subprocess.call('touch sandbox.log', shell=True)
subprocess.call('echo "" > sandbox.log', shell=True)

print 'open the file descriptor'
fd = os.open('sandbox.log', os.O_WRONLY)

command = 'sleep 10 && echo "hello world"'
print 'run the command'
p = subprocess.Popen(command, stdout=fd, stderr=subprocess.STDOUT, shell=True)

os.close(fd)

try:
    os.close(fd)
except OSError:
    print 'fd is already closed'
else:
    print 'fd takes some time to close'

if p.poll() is None:
    print 'p isnt finished, but fd is closed'

p.wait()
print 'p …
Run Code Online (Sandbox Code Playgroud)

python unix file-descriptor python-os

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