这根管子有什么问题吗?

发布于 2024-10-04 11:41:54 字数 978 浏览 5 评论 0原文

#include <unistd.h>
#include<stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
#include <string.h>  
#include <pthread.h>

int main (int argc, char * argv[])
{
    int enteroParaElPipe;  
    int IDPROGRAMACLIENTE=getpid(); 
    printf("%d",IDPROGRAMACLIENTE);

    if((mkfifo("pipe",0666))==-1) 
    {
        perror("error creating pipe, type 1");
        exit(1);
    }

    if((enteroParaElPipe=open("pipe",O_WRONLY))==-1)
    {
       perror("error creating pipe, type 2");
       exit(1);
    }

    char comando[200];

    if(scanf("%199s", comando) == 1)
         puts(comando);

    int written;
    escritos=write(enteroParaElPipe,"HOLA\n",5);
    printf("Written: %d\n",written);
    close(enteroParaElPipe);

    return 0;
}

当尝试运行此代码时,我得到:

error creating pipe: Invalid argument

为什么?

(根据添加的第一个答案进行修改)

#include <unistd.h>
#include<stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
#include <string.h>  
#include <pthread.h>

int main (int argc, char * argv[])
{
    int enteroParaElPipe;  
    int IDPROGRAMACLIENTE=getpid(); 
    printf("%d",IDPROGRAMACLIENTE);

    if((mkfifo("pipe",0666))==-1) 
    {
        perror("error creating pipe, type 1");
        exit(1);
    }

    if((enteroParaElPipe=open("pipe",O_WRONLY))==-1)
    {
       perror("error creating pipe, type 2");
       exit(1);
    }

    char comando[200];

    if(scanf("%199s", comando) == 1)
         puts(comando);

    int written;
    escritos=write(enteroParaElPipe,"HOLA\n",5);
    printf("Written: %d\n",written);
    close(enteroParaElPipe);

    return 0;
}

When trying to run this code I get:

error creating pipe: Invalid argument

Why?

(Modifications based on the first answers added)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

香橙ぽ 2024-10-11 11:41:54

为什么要传递 getpid() 作为 mkfifo 的第二个参数?

第二个参数是模式,如 FIFO 文件的权限。输入 man 3 mkfifo 了解更多信息!

干杯。

Why are you passing getpid() as the 2nd argument for mkfifo?

The 2nd argument is the mode, as in, the FIFO file's permissions. Type man 3 mkfifo for more information!

Cheers.

无声静候 2024-10-11 11:41:54

mkfifo 的第二个参数是表示 fifo 权限的 mode_t。

尝试:mkfifo("pipe", 0666);

The second argument to mkfifo is a mode_t representing the permissions on the fifo.

Try: mkfifo("pipe", 0666);

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文