标签: fifo

阻塞直到读取器连接到命名管道

我编写了一个服务器,它打开一个命名管道(它会阻塞,所以它会等待客户端连接),然后定期向管道写入一些内容。客户端打开管道,从中读取并处理数据。但是,由于我无法控制的情况,客户端经常退出并在此后不久再次重新启动。

当服务器想要在没有读取器连接到管道的短时间内写一些东西时,这会导致问题:服务器收到一个 SIGPIPE 并退出。我可以忽略信号,但我不想丢失数据:理想情况下,服务器会等到客户端重新连接到管道后再写入数据。在此写入期间服务器阻塞是没有问题的。

使用write()我可以尝试 0 字节写入并检查EPIPE错误以检测是否有客户端连接。但是我怎样才能阻止直到客户端连接(除了稍微睡一觉,然后再次尝试写入)?

还是有另一种更好的方法来实现这一目标?

c linux fifo

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

写入后读取*standard-input*Common Lisp

这是一个非常简单的问题.我正在尝试解决HackerRank问题,但不完全理解我如何写入*standard-input*以便在我的计算机上运行代码.

它要求给定一个数组,给定数组的长度(N),然后是数组本身全部在*standard-input*上.

Hackerranks使用*standard-input*来给出值,如果我可以在输入中存储值然后读取它们,那将是最简单的.

我的问题是如何写入*standard-input*?这将使我在计算机上而不是在云中工作变得更加容易.

lisp common-lisp stream fifo

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

轮询与中断?

假设您有一个具有 32 深度 FIFO 的设备,其中在转换完成后存储来自 ADC 的数据。每次 FIFO 中有 X 个样本时,您都可以触发中断并从中获取数据。

当中断触发时,设备上的中断寄存器中的一个位被设置并且中断线被断言。

所以我的问题是:轮询中断寄存器以获取数据与使用中断线的功能有什么不同吗?是否有任何时间问题或我应该注意的任何问题?

microcontroller interrupt fifo

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

在linux中:写入FIFO

我使用mkfifo命令创建了一个新的FIFO .我有一个文本文件f.txt.我想把文本文件写入我的FIFO.怎么样?是否有unix命令?

unix linux shell fifo

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

UNIX FIFO:如果我不关闭fifo的输入端,则进程挂起

我刚刚开始使用UNIX FIFO,我在尝试第一个FIFO程序时发现了一些东西.程序以这种方式工作:创建FIFO后,使用该fork()函数启动两个进程.子进程读取父亲通过FIFO传递给他的内容,并将其打印在屏幕上.交换的数据是指定为参数的字符串.问题是:在父节中,如果我忘记关闭FIFO的输入端(意味着我排除了close(fd)行),即使正确交换了进程之间的数据,程序也会挂起.否则,一切正常,程序终止而不挂.有人可以解释一下为什么吗?

谢谢你的耐心.这是主要功能的代码:

int main(int argc, char *argv[])
{
    if(argc != 2)
    {
        printf("An argument must be specified\n");
        return -1;
    }   

    int ret = mkfifo("./fifo.txt", 0644);
    char buf;

    if(ret < 0)
    {
        perror("Error creating FIFO");
        return -1;
    }

    pid_t pid = fork();

    if(pid < 0)
    {
        perror("Error creating child process");
        return -1;
    }

    if(pid == 0) /* child */
    {
        int fd = open("./fifo.txt", O_RDONLY); /* opens the fifo in reading mode */

        while(read(fd, &buf, 1) …
Run Code Online (Sandbox Code Playgroud)

c unix fifo

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

两个过滤器由Linux上的两个命名管道(FIFO)循环链接

我想让两个进程通过Linux上的两个命名管道相互通信.每个进程都是一个Unix过滤器:它读取标准输入的数据并在其标准输出上写入数据.它们是循环链接的,第一个的输出是第二个的输入,反之亦然.

这是第一个过滤器(ac)的代码:

#include <stdio.h>

int main( void  ){
  FILE* ferr = fopen( "/dev/stderr", "w" );
  double d;

  fprintf(ferr,"A is going to write\n");
  printf("%lf\n",1.);
  fprintf(ferr,"A wrote %lf\n",1.);

  while( 1 ){
    fprintf(ferr,"A is going to read\n");
    if( scanf("%lf",&d) == EOF ){
      break;
    }
    fprintf(ferr,"A recieved : %lf\n",d);
    d += 1;
    fprintf(ferr,"A is going to write\n");
    printf("%lf\n",d);
    fprintf(ferr,"A wrote %lf\n",d);
  }
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

这是第二个过滤器的代码(bc):

#include <stdio.h>

int main( void  ){
  FILE* ferr = fopen( "/dev/stderr", "w" );
  double d;

  while( 1 ){ …
Run Code Online (Sandbox Code Playgroud)

c linux named-pipes fifo cat

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

如何检查文件是否是perl中的命名管道?

有一些像:

-e /path/to/file or die "file doesn't exist";
Run Code Online (Sandbox Code Playgroud)

有可能做这样的事情:

-p /path/to/pipe or die "not a valid pipe";
Run Code Online (Sandbox Code Playgroud)

perl file named-pipes fifo

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

在C中读取和删除FIFO

我正在构建一个通过FIFO与其客户端进行通信的服务器.

到目前为止,我已经设法创建一个FIFO,一旦消息到达FIFO并从线程输出消息,就运行一个新线程.

问题是,只要客户端在管道中写入内容,服务器就会无休止地打印消息(我正在读取管道中的内容while(1)).

我的问题是:read操作是否也应该从管道中删除消息,因此不会再次读取?这不是First In,First Out的重点吗?这是我必须手动完成的吗?

这也是我的代码,如果有帮助:http://pastebin.com/Ag7vgrav
我在FIFO中写的内容只是:echo test > /home/ubuntu/work/my_fifo

c named-pipes fifo

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

Fifo开幕问题C.

我有这个代码:

mkfifo ("bPipe", 0660); /* Create named pipe */


int fd1 = open ("bPipe", O_WRONLY|O_NONBLOCK); /* Open named pipe for writing */

perror("FD1");

int fd = open ("bPipe", O_RDONLY|O_NONBLOCK); /* Open it for reading */

 perror("FD");

char*mex="Hello world\n\0";

write (fd1,mex , getStringLenght(mex)+1); 

char* result = readline(fd1);

printf("Rc %s : \n",result);
Run Code Online (Sandbox Code Playgroud)

我正在研究C中的FIFO,我试图创建两个FIFO,但在打开它之后我得到了这两个错误:

FD1:Device not configured
FD:Device not configured
Run Code Online (Sandbox Code Playgroud)

而且我不明白为什么.

PS"readLine"和"getStringLenght"是我的功能

c fifo

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

VBA - 如何在数组中创建队列?(FIFO)先进先出

我正在尝试建立一个能够显示先出先出概念的队列.我想要一个作为等待名单的数组.后来的病人将在晚些时候出院.在这个房间里有24名病人的限制,其余的将进入等待名单.每当房间空无一人时,等候室(最早)的第一批病人就会前往房间.这是我到目前为止提出的代码.任何帮助是极大的赞赏.

    Dim arrayU() As Variant
    Dim arrayX() As Variant
    Dim arrayW() As Variant
    Dim LrowU As Integer
    Dim LrowX As Integer
    Dim LrowW As Integer
    'Dim i As Integer
    Dim j As Integer
    Dim bed_in_use As Integer

    LrowU = Columns(21).Find(What:="*", LookIn:=xlValues, SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
    LrowX = Columns(24).Find(What:="*", LookIn:=xlValues, SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
    LrowW = Columns(23).Find(What:="*", LookIn:=xlValues, SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row

    ReDim arrayU(1 To LrowU)
    ReDim arrayX(1 To LrowX)
    ReDim arrayW(1 To LrowW)

    For i = 3 To LrowU
        arrayU(i) = Cells(i, 21)
    Next i

    i …
Run Code Online (Sandbox Code Playgroud)

queue vba fifo

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

标签 统计

fifo ×10

c ×5

linux ×3

named-pipes ×3

unix ×2

cat ×1

common-lisp ×1

file ×1

interrupt ×1

lisp ×1

microcontroller ×1

perl ×1

queue ×1

shell ×1

stream ×1

vba ×1