我正在尝试理解该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) 我正在尝试这个例子: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) 我正在学习条件编译,我认为到目前为止我对它很了解.现在,如果我有代码:
#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"并没有告诉我任何关于这个的信息,也许我不知道如何在互联网上搜索这个!!
非常感谢您分享您的知识!
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]这里的功能是什么.
非常感谢你!
我有管道和重复使用的这个例子.它应该创建一个由管道连接的两个进程的环.这是代码:
#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调用:
孩子是否将标准输出重定向到管道?
父级是否将标准输入重定向到管道?
我在这里看不到戒指.
我希望自己清楚明白,因为我真的很困惑.
非常感谢你!!