小编Chr*_*ner的帖子

stat系统调用的st_mode的标志

我正在尝试理解该stat命令的stat结构的st_mode字段的标志,但是我有这么难的时间!我在这里找到了这个例子,但我真的不明白这个代码片段:

if ( mode & S_IRUSR ) str[1] = 'r';    /* 3 bits for user  */
if ( mode & S_IWUSR ) str[2] = 'w';
if ( mode & S_IXUSR ) str[3] = 'x';

if ( mode & S_IRGRP ) str[4] = 'r';    /* 3 bits for group */
if ( mode & S_IWGRP ) str[5] = 'w';
if ( mode & S_IXGRP ) str[6] = 'x';

if ( mode & S_IROTH ) str[7] = 'r';    /* 3 …
Run Code Online (Sandbox Code Playgroud)

c unix filesystems stat

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

杀死信号的例子

我正在尝试这个例子:http : //www.cs.cf.ac.uk/Dave/C/node24.html:

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

void sighup(); /* routines child will call upon sigtrap */
void sigint();
void sigquit();

main() { 
 int pid;

 /* get child process */

 if ((pid = fork()) < 0) {
    perror("fork");
    exit(1);
 }

if (pid == 0) { /* child */
   printf("\nI am the new child!\n\n");
       signal(SIGHUP,sighup); /* set function calls */
       signal(SIGINT,sigint);
       signal(SIGQUIT, sigquit);
       printf("\nChild going to loop...\n\n");
      for(;;); /* loop for ever */
 }
else …
Run Code Online (Sandbox Code Playgroud)

c unix signals kill

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

gcc条件编译

我正在学习条件编译,我认为到目前为止我对它很了解.现在,如果我有代码:

 #ifdef UMP_TO_FILE
    //do something here...
 #endif
Run Code Online (Sandbox Code Playgroud)

我跑:

 gcc myprogram.c -DUMP_TO_FILE
Run Code Online (Sandbox Code Playgroud)

然后,代码块"//在这里做某事......"被编译.现在,我的问题是:

-DUMP_TO_FILE标志究竟是什么?

我认为标志是"-D"并且它定义了宏"UMP_TO_FILE",但是我想确定它的结构和"gcc --help"并没有告诉我任何关于这个的信息,也许我不知道如何在互联网上搜索这个!!

非常感谢您分享您的知识!

unix gcc conditional-compilation

5
推荐指数
2
解决办法
4188
查看次数

execvp参数

Helllo大家,

我有这个示例代码:

pid = fork();
if (pid == 0) {
   execvp(argv[2],&argv[2]);
   perror("Error");
}else {
wait(NULL);

}  
Run Code Online (Sandbox Code Playgroud)

man exec我所知

"按照惯例,第一个参数应该指向与正在执行的文件相关联的文件名".

所以,如果我以这种方式执行我的程序:

./a.out 5 ls
Run Code Online (Sandbox Code Playgroud)

命令ls将被执行.

第二个论点怎么样?手册说

"指针数组必须以NULL指针终止"

我在这里看不到NULL指针,也没有说明&argv[2]这里的功能是什么.

非常感谢你!

c unix exec

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

使用管道的两个过程的环

我有管道和重复使用的这个例子.它应该创建一个由管道连接的两个进程的环.这是代码:

#include <unistd.h>

#define READ 0
#define WRITE 1

main (int argc, char *argv[]) {
 int fd[2];
 pipe(fd); //first call to pipe
 dup2(fd[READ],0);
 dup2(fd[WRITE],1);
 close(fd[READ]);
 close(fd[WRITE]);
 pipe(fd); //second call to pipe

 if (fork()==0) {
    dup2(fd[WRITE],1);
 } else
    dup2(fd[READ],0);

 close(fd[READ]);
 close(fd[WRITE]);
}
Run Code Online (Sandbox Code Playgroud)

从"两个过程的循环"我理解过程A的输出连接到过程B的输入,过程B的输出连接到过程A的输入.

在第一次调用pipe之后,以及dup2的两次成功调用之后,我认为标准输入和输出被重定向到我的新管道的输入和输出.

然后,第二次调用管道让我感到困惑,因为我认为它会覆盖我以前的fd值.在这一点上标准输入和输出发生了什么?

最后,fork调用:

孩子是否将标准输出重定向到管道?

父级是否将标准输入重定向到管道?

我在这里看不到戒指.

我希望自己清楚明白,因为我真的很困惑.

非常感谢你!!

c unix pipe

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

标签 统计

unix ×5

c ×4

conditional-compilation ×1

exec ×1

filesystems ×1

gcc ×1

kill ×1

pipe ×1

signals ×1

stat ×1