标签: file-descriptor

socket select()如何工作?

如网络编程书籍中所述,select()监视一组文件描述符以供读取.例如,以下是代码的一部分:

select(numfds, &read_fds, NULL, NULL, NULL);
Run Code Online (Sandbox Code Playgroud)

numfds是read_fds + 1中套接字的最大数量.是否意味着,每个"监视器"循环都会监视select()进程的所有文件描述符,从0到numfds?我的意思是,如果我只有两个文件描述符来监视(0和26),是否选择观察从0到26的所有描述符?

c sockets file-descriptor

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

如何确定文件描述符是否可搜索?

是否有任何可移植的方式(在POSIX系统上)来确定文件描述符是否可搜索?我的想法是使用lseek(fd, 0, SEEK_CUR);并检查返回值是否为-1,但我不确定这是否会给出假阴性或误报.使用fstat和假设哪些类型的文件是可搜索/不可搜索的并不是一个好主意.还有其他想法吗?

c posix file-descriptor

11
推荐指数
2
解决办法
3662
查看次数

在变量中使用文件描述符或文件名重定向

在我的脚本中,我希望能够根据特定条件写入文件或stdout.我很好奇为什么这在我的脚本中不起作用:

out=\&1
echo "bird" 1>$out
Run Code Online (Sandbox Code Playgroud)

我尝试了不同的引号组合,但我继续创建一个"&1"文件,而不是写入stdout.我该怎么做才能让我的工作方式如何?

bash redirect file-descriptor

11
推荐指数
2
解决办法
8856
查看次数

Node.js:EBADF,错误的文件描述符

如果我重新加载我的应用程序(从带有重新加载按钮的浏览器)很多时候50 reload/10 seconds它会给我这个错误:

events.js:45
    throw arguments[1]; // Unhandled 'error' event
                   ^
Error: EBADF, Bad file descriptor
Run Code Online (Sandbox Code Playgroud)

这在我看来像带宽错误或类似的东西,最初我在使用HTML 5 Audio API时遇到错误,如果我按顺序加载音频文件10-15次,那么我就得到了错误,但是现在我发现我在没有音频API的情况下得到错误只是通过重新加载网站很多次,Safari也比Chrome更快地给我错误(WTF?)

我正在使用带有express+的Node.js 0.4.8,jade并且我还使用该db-mysql模块连接到MySQL数据库.

我在网上找不到任何关于这个主题的文章有什么帮助,所以pleeease让我知道什么可能导致这个错误,因为它真的令人困惑:(

file-descriptor node.js

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

C读取和线程安全(linux)

如果你在同一个文件描述符中调用read(或者write两个)两个不同的线程会发生什么(让我们说我们对本地文件感兴趣,并且它是一个套接字文件描述符),而不使用显式的同步机制?

读取和写入都是系统调用,因此,在单核CPU上,可能不幸的是两个读取将"同时"执行.但是有多个核心......

linux内核会做什么?

让我们更通用一点:其他内核(如BSD)的行为总是一样的吗?

编辑:根据密切的文档,我们应该确保文件描述符不被其他线程中的系统调用使用.因此,它的接缝显式同步将关闭文件描述符之前,需要进行(等,还围绕读/写,如果线程可以称之为仍在运行).

c linux multithreading file-descriptor

11
推荐指数
2
解决办法
9678
查看次数

inode编号和文件描述符之间有什么区别?

我理解文件描述符是用于标识文件的内核句柄,而文件的inode编号是指向具有关于文件的其他详细信息的结构的指针(如果我错了,请纠正我).但我无法区分它们.

filesystems inode file-descriptor

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

是否为明确定义的相同文件描述符创建了两个FILE?

POSIX指定了一个fdopen函数,它FILE为文件描述符创建一个.POSIX还指定了一个fileno函数,该函数返回a的文件描述符FILE.总之,这两个可以用于创建第二个FILE访问与现有文件相同的底层文件描述符:

FILE *secondfile(FILE *f, const char *mode)
{
    int fd = fileno(f);

    return fd >= 0 ? fdopen(fd, mode) : NULL;
}
Run Code Online (Sandbox Code Playgroud)

这是POSIX下定义明确的操作吗?当我访问同一个文件描述符的原始FILE和第二个时,会发生什么FILE?是否指定了交互?如果有,怎么样?

从历史上看,Unices FILE为您打开的20个文件使用了固定的结构表.调用fdopen()已经与a关联的文件描述符FILE会因此破坏现有文件并产生未定义的行为.我不确定stdioPOSIX是否仍然允许这样的实现,这就是我提出这个问题的原因.

c posix file-descriptor stdio language-lawyer

11
推荐指数
1
解决办法
708
查看次数

O_LARGEFILE只需要写一个大文件吗?

O_LARGEFILE如果我想要做的就是写一个大文件(O_WRONLY)或附加到一个大文件(O_APPEND | O_WRONLY),那么标志是否需要?

从我在CLucene-dev邮件列表上读到的标题为" 无法写入> 2gb 索引文件 "的帖子中,似乎O_LARGEFILE可能需要编写大文件,但该讨论中的参与者正在使用O_RDWR,不是O_WRONLY,所以我不确定.

c file-descriptor large-file-support large-files posix-api

10
推荐指数
2
解决办法
9815
查看次数

FIFO管道在select()中始终可读

在C伪代码中:

while (1) {
    fifo = open("fifo", O_RDONLY | O_NONBLOCK);
    fd_set read;
    FD_SET(fifo, &read);
    select(nfds, &read, NULL, NULL, NULL);
}
Run Code Online (Sandbox Code Playgroud)

进程在触发时休眠,select()直到另一个进程写入fifo.之后它总是会找到fifo一个可读的文件描述符.

如何避免这种行为(也就是说,在fifo读过一次之后,如何让它在被另一次写入之前被发现是不可读的?)

c select file-descriptor fifo

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

文件描述符的可能值是什么?

我有兴趣知道我可以期待的文件描述符的有效值.

请让我解释一下.我知道,例如,当我#include <unistd.h>在我的linux系统上使用然后调用打开文件进行阅读时:

int fileDescriptor;
fileDescriptor = open("/some/filename",O_RDONLY);
Run Code Online (Sandbox Code Playgroud)

可能会发生错误,因此我收到-1.
毫无疑问,( - 1)否定的必须具有某种特殊含义.是否所有其他值都是有效的文件描述符?即也是-2和-1023等负面的?

假设int是4个字节(sizeof(int)==4),那么就是

(-1) = 10000000 0000000 00000000 00000001
Run Code Online (Sandbox Code Playgroud)

将是唯一可检测的无效文件描述符?其他人会喜欢:

  • (0) = 00000000 0000000 00000000 00000000
  • (-2) = 10000000 0000000 00000000 00000010
  • (2) = 00000000 0000000 00000000 00000010

好吗?由于文件描述符可以存储4个字节,因此我可以拥有最多(2 ^(8*4)-1)个有效文件描述符,因此这将是我可以打开的最大文件数,对吗?

再说一遍:

我应该期望(有效)文件描述符是什么?

任何值,但-1?

c linux validation file-descriptor

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