标签: file-descriptor

带close()套接字的错误文件描述符(c ++)

当程序无法连接其他主机时,我的文件描述符用完了.close()系统调用不起作用,打开套接字的数量增加.我可以用它

cat/proc/sys/fs/file-nr

从控制台打印:

connect:没有到主机的路由

close:错误的文件描述符

connect:没有到主机的路由

close:错误的文件描述符

..

码:

#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <string.h>
#include <iostream>
using namespace std;

#define PORT            1238
#define MESSAGE         "Yow!!! Are we having fun yet?!?"
#define SERVERHOST      "192.168.9.101"

void
write_to_server (int filedes)
{
  int nbytes;

  nbytes = write (filedes, MESSAGE, strlen (MESSAGE) + 1);
  if (nbytes < 0)
    {
      perror ("write");
    }
}

void
init_sockaddr (struct sockaddr_in *name,
               const char *hostname,
               uint16_t port)
{
  struct hostent *hostinfo;

  name->sin_family …
Run Code Online (Sandbox Code Playgroud)

c++ sockets file-descriptor

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

java数据报套接字的文件描述符

如何获取Java数据报套接字的文件描述符?我在网上搜索没有任何成功.

作者Srini

sockets datagram file-descriptor

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

4参数 - 选择 - 问题

来自SELECT_TUT:

"...用于有效地监视多个文件描述符,以查看它们中的任何一个是否已成为"准备好";也就是说,查看I/O是否成为可能,或者是否出现"异常情况"描述符....

那么select()有什么意义呢?我不能随时随地读写我的描述符吗?select()的意思是它同时监视多个描述符,并在没有活动时正确地将进程置于休眠状态.Unix程序员经常发现他们必须处理来自多个文件描述符的I/O,其中数据流可能是间歇性的.如果你只是创建一个read(2)和write(2)调用序列,你会发现你的一个调用可能会阻止等待来自/到文件描述符的数据,而另一个文件描述符虽然已经准备就绪但未被使用/ O.select()有效地应对了这种情况."

有人可以解释我,这意味着什么以及如何运作,也许只是一个小例子.

例如,这里只选择一个文件句柄,为什么我需要监控?

my $timeout = 10;
my ( $in, $out ) = ( '', '' );
vec( $in, fileno( STDIN ), 1 ) = 1;
select( $out = $in, undef, undef, $timeout );
Run Code Online (Sandbox Code Playgroud)

perl select file-descriptor filehandle

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

与C中的close(fd)相反的是什么?

我正在尝试制作一个迷你shell,其中命令是相互管道的.在代码中的某些点我做:

close(1) //closing stdout
Run Code Online (Sandbox Code Playgroud)

close(0) //closing stdin
Run Code Online (Sandbox Code Playgroud)

但是后来我正在分叉,所以我希望我的新子进程重置所有内容.那我该怎么做:

*function_name_here*(1) //reopening stdout
Run Code Online (Sandbox Code Playgroud)

*function_name_here*(0) //reopening stdin
Run Code Online (Sandbox Code Playgroud)

c pipe file-descriptor

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

Linux Socket写错文件描述符()坏文件描述符C

我有一个写(2)函数的有趣问题.PrepareResponseForSetCoordinates函数在写入时导致错误的文件描述符错误.

这是错误行:perror("ERROR写入套接字"); 总输出:ERROR写入套接字:错误的文件描述符

我确信我已经建立了连接,因为PrepareResponseForConnectionTest就像一个魅力.

你能对错误的原因有所了解吗?

当我使用gcc作为编译器时没有问题.之后因为使用多个新的cpp源我使用g ++作为编译器而且我有这个错误.

问候

这是我的代码:

#define MAX_PMS_MESSAGE_LEN (4096)
unsigned char baCommBuffer[MAX_PMS_MESSAGE_LEN];
unsigned char PrepareResponseForSetCoordinates(void)
{
    unsigned char baTempBuff[255]={0};
    unsigned short bCnt=0,i=0,bCsum=0,bCnt2=0;
time_t lEpochTime;
time_t lSessionTime;

memset(baTempBuff,0,sizeof(baTempBuff));
memset(baCommBuffer,0,sizeof(baCommBuffer));
bzero(baCommBuffer,MAX_PMS_MESSAGE_LEN);
bzero(baTempBuff,sizeof(baTempBuff));


lEpochTime = time(NULL);
baCommBuffer[bCnt++]    =   START_CHAR;
baCommBuffer[bCnt++]    =   START_CHAR;
baCommBuffer[bCnt++]    =   PACKET_SEPERATOR;
sprintf((char*)baTempBuff,"%ld",(unsigned long)lEpochTime);
memcpy(baCommBuffer+bCnt,baTempBuff,10);

bzero(baTempBuff,sizeof(baTempBuff));
bCnt+=10;
baCommBuffer[bCnt++]    =   PACKET_SEPERATOR;
//  lSessionTime = time(NULL);
if(SPMSMessage.lSessionID)
lSessionTime = SPMSMessage.lSessionID; 
else
lSessionTime=lEpochTime;
sprintf((char*)baTempBuff,"%ld",(unsigned long)lSessionTime);
memcpy(baCommBuffer+bCnt,baTempBuff,10);
bzero(baTempBuff,sizeof(baTempBuff));
bCnt+=10;
baCommBuffer[bCnt++]    =   PACKET_SEPERATOR;
baCommBuffer[bCnt++]    =   PMC_ID;
baCommBuffer[bCnt++]    =   PACKET_SEPERATOR;
baCommBuffer[bCnt++]    =   PMS_ID; …
Run Code Online (Sandbox Code Playgroud)

c sockets linux tcp file-descriptor

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

使用read()函数时检查EOF

这是我第一次使用文件描述符进行读取,并且我已经通过反复试验进行了大约3个小时的测试,而我的读取器几乎可以正常工作!我只需要一点帮助来检查命名管道上的EOF。

好的,这样我就可以打开一个(多个)命名管道:

fds[j].fd = open(pipeNameo, O_RDWR) ; // storing it into my file descriptor array
Run Code Online (Sandbox Code Playgroud)

然后我在轮询命名管道以查看是否发生了任何事情(轮询在循环内):

int ret = poll(fds, numOfPipesUsed, timeout_msecs);
Run Code Online (Sandbox Code Playgroud)

当确实发生问题时,我通过发送写入该函数的文件描述符来处理文件:

int processFileDes( int fd )
{
    char buf[10] ;

    read(fd, buf, 1) ;
    char curr = buf[0] ;
    while (curr != EOF)
    {

        if ( curr == ' ')
        {
            // do nothing it is a space
        }
        else if ( curr == '\n')
        {
            printf("NEW LINE!\n") ;
        }
        else
        {
            int num = curr - '0' …
Run Code Online (Sandbox Code Playgroud)

c file-descriptor named-pipes polling

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

使C程序写入标准输出,即使它需要输出文件名

我有一个C程序,它接受输出文件名并将数据转储到其中.很可能该程序使用FILE*指针.是否可以将终端stdout传递给该C程序?我无权访问该代码.

我的意思是,该计划的工作原理如下 -

> ./program out.txt # --> dumps data into out.txt
Run Code Online (Sandbox Code Playgroud)

我想做的是像 -

> ./program &1 # --> dumps data on the terminal.
Run Code Online (Sandbox Code Playgroud)

可能吗?怎么做到呢?

c file-descriptor

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

不知道flock是如何工作的.需要一些澄清

我有一个bash脚本,它发出一个cURL请求并将输出写入一个名为的文件resp.txt.我需要创建一个独占锁,以便我可以写入该文件,而不用担心多个用户同时运行脚本和编辑文本文件.

这是我希望锁定文件,执行请求和写入文本文件的代码:

(
flock -e 200
curl 'someurl' -H 'someHeader' > resp.txt
) 200>/home/user/ITS/resp.txt
Run Code Online (Sandbox Code Playgroud)

这是正确的方法吗?我的实际脚本比这个有点长,但是当我将flock语法添加到bash脚本时它似乎会中断.我的理解是,这会创建一个可以写入锁定文件的子shell.我只是不确定是否需要将文件描述符添加到curl请求中,如下所示:

curl 'someurl' -H 'someHeader' 200>resp.txt
Run Code Online (Sandbox Code Playgroud)

如果有人可以解释这些文件描述符是如何工作的,让我知道我是否正确锁定文件会很棒!

linux bash file-descriptor flock

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

如何使用write()函数将结构写入文件?

我想使用write()函数将struct对象写入文件.它必须是那个功能.

我在终端的输入是:./ main.c output.dat John Doe 45

当我运行程序并打开output.dat时,有一堆字母没有意义.请帮我.

我在output.dat文件中想要的输出是:John Doe 45

我的代码:

struct Person{
  char* name;
  char* lastName;
  char* age;
};

int main(int argc, char** argv){

    struct Person human;
    /* get the argument values and store them into char*         */
    char* fileName = argv[1];
    char* name = argv[2];
    char* lastName = argv[3];
    char* age = argv[4];

    /* set the values of human object */
    human.name = name;
    human.lastName = lastName;
    human.age = age;

    /* open the file */ …
Run Code Online (Sandbox Code Playgroud)

c c++ posix file-descriptor

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

使用React进行使用Golang的服务器端渲染

假设我们想要使用Node.js进程池,使用React渲染一些HTML.(我不是说这是一个好主意,只是假设是这种情况,lulz).

有没有办法将Golang的请求/响应流的引用传递给Node.js进程?我认为Node.js的集群模块使用这种技术,通过传递文件描述符或类似的东西.请注意,Node.js进程池(可能是3个进程左右)将是Golang进程的子进程.

fork file-descriptor go child-process node.js

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

标签 统计

file-descriptor ×10

c ×5

sockets ×3

c++ ×2

linux ×2

bash ×1

child-process ×1

datagram ×1

filehandle ×1

flock ×1

fork ×1

go ×1

named-pipes ×1

node.js ×1

perl ×1

pipe ×1

polling ×1

posix ×1

select ×1

tcp ×1