小编Bhu*_*esh的帖子

如何从管道文件中返回?

使用 mkfifo 命令我们可以创建我们的管道文件。之后,我只是使用 vim 编辑器打开了该文件。

  mkfifo pipe_file

  vim pipe_file
Run Code Online (Sandbox Code Playgroud)

但是我不能回到我的终端,我怎样才能回到终端?

linux vim fifo

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

哪个用户可以使用setpgid()函数?

当我执行此函数时,我为setpgid()计算了函数,结果将被拒绝.然后我以root用户身份登录该时间,这将打印错误消息,因为权限被拒绝.然后哪个用户可以使用此功能.有谁可以向我解释一下?

   #include<stdio.h>
   #include<unistd.h>
   #include<stdlib.h>

  main()
   {
    printf("parent pid=%d\tpgid=%d\n",getpid(),getpgid(getpid()));
    pid_t pid,pgid;
    pgid=getpgid(getpid());
    if((pid=fork())==0)
    {
            printf("befor sessionchild pid=%d\tpgid=%d\n",getpid(),getpgid(getpid()));
            sleep(5);
            pid_t p;
            printf("child pid=%d\tpgid=%d\n",getpid(),getpgid(getpid()));
            if((p=fork())==0){
                    sleep(2);
                    setsid();
                    printf("child2 pid=%d\tpgid=%d\n",getpid(),getpgid(getpid()));
                    setpgid(getpid(),pgid);
                    perror("Error");
                    printf("after setting group id child2 pid=%d\tpgid=%d\n",getpid(),getpgid(getpid()));
            }
            wait(0);
            exit(0);
    }
    exit(0);
  }                                        
Run Code Online (Sandbox Code Playgroud)

c linux

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

为什么 wait() 函数需要更多参数?

我尝试使用 waitpid() 函数,它需要三个参数,当我实现下面的代码时,我遇到了一些错误,我使用带有三个参数的 wait() 函数,而不是 waitpid() 函数。它工作正常,我不知道它是如何工作的。有谁能解释一下吗??

 #include<stdio.h>
  #include<stdlib.h>
 #include<unistd.h>

main()
 {
    pid_t pid;
    int p;

    if((pid=fork())==0){
            printf("Child present\n");
            sleep(2);
            printf("Child terminated\n");
            _exit(0);
    }
    wait(pid,&p,0);                                                                                         
    printf("parent terminated\n");
    return 0;
 }
Run Code Online (Sandbox Code Playgroud)

但等待函数的语法是

 pid_t wait(int *status);
Run Code Online (Sandbox Code Playgroud)

c fork waitpid

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

如何删除所有 IPC-Message 队列?

考虑我使用 msgget() 函数创建了 100 个消息队列。

 ------ Message Queues --------
 key        msqid      owner      perms      used-bytes   messages    
0x00000000 262144     bhuvaneshw 666        40           2           
0x00000000 294913     bhuvaneshw 666        40           2           
0x00000000 327682     bhuvaneshw 666        40           2           
0x00000000 360451     bhuvaneshw 666        40           2           
0x00000000 393220     bhuvaneshw 666        40           2           
0x00000000 425989     bhuvaneshw 666        55           3        
....
.....
....
Run Code Online (Sandbox Code Playgroud)

使用一个ipcrm命令,我们可以一次删除单个队列。

ipcrm -q queue_id
Run Code Online (Sandbox Code Playgroud)

或者使用 amsgctl()我们可以删除它。但我想一次性删除所有消息队列。有没有办法在linux中做到这一点?

c unix linux ipc

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

标签 统计

c ×3

linux ×3

fifo ×1

fork ×1

ipc ×1

unix ×1

vim ×1

waitpid ×1