select()和pselect()系统调用修改它们的参数(' fd_set * '参数),所以input值告诉系统要检查哪些文件描述符,返回值告诉程序员哪些文件描述符当前可用。 如果您打算为同一组文件描述符重复调用它们,则需要确保每次调用都有一个新的描述符副本。 显而易见的方法是使用结构副本: fd_set ref_set_rd; fd_set ref_set_wr; fd_set ref_set_er; … …code to set the reference fd_set_xx values… … while (!done) { fd_set act_set_rd = ref_set_rd; fd_set act_set_wr = ref_set_wr; fd_set act_set_er = ref_set_er; int bits_set = select(max_fd, &act_set_rd, &act_set_wr, &act_set_er, &timeout); if (bits_set > 0) { …process the output values of act_set_xx… […]
如何区分正在运行的Java线程和本地线程? 在Linux中,每个subprocess都有父进程,并且他们说0是所有进程的父进程,所有分叉的Java线程的父进程是否会有? 如何知道哪个Java线程与OS线程相关(如果Java线程阻塞了本机进程线程)。 Java线程和操作系统线程是否有任何命名约定? 一个正在运行的Java线程可以被另一个Java代码挂起或者死亡吗?
我的机器运行Ubuntu 10.10,并使用标准的GNU C库。 如果在格式化string中有一个换行符,那么printf会冲洗缓冲区,但是下面的代码似乎反复地改变了这个趋势。 有人可以澄清为什么缓冲区没有被刷新。 #include <stdio.h> #include <unistd.h> #include <fcntl.h> #include <sys/wait.h> int main() { int rc; close(1); close(2); printf("HI 1\n"); fprintf(stderr, "ERROR\n"); open("newfile.txt", O_WRONLY | O_CREAT | O_TRUNC, 0600); printf("WHAT?\n"); fprintf(stderr, "I SAID ERROR\n"); rc = fork(); if (rc == 0) { printf("SAY AGAIN?\n"); fprintf(stderr, "ERROR ERROR\n"); } else { wait(NULL); } printf("BYE\n"); […]
据我所知,在命令后面使用&是为了在后台运行它。 &使用示例: tar -czf file.tar.gz dirname & 但是&&怎么样? (看看这个例子: https : //serverfault.com/questions/215179/centos-100-disk-full-how-to-remove-log-files-history-etc#answer-215188 )
如何在C ++中捕获Ctrl + C事件?
标准对主要回报值的评价范围是什么? 只说最多255? 因为 int main(void){ return 256; } echo $? ; # out 0
在Linux 3.0 / C ++下: 我想要一个function,执行以下操作: string f(string s) { string r = system("foo < s"); return r; } 上述显然不起作用,但你明白了。 我有一个strings,我想通过作为应用程序“foo”的subprocess执行的标准input,然后我想将其标准输出logging到stringr,然后返回它。 我应该使用什么linux系统调用或posix函数的组合?
我试图在C中实现一个shell。我可以用一个简单的execvp()来执行简单的命令,但是其中一个要求是pipe理这样的命令:“ls -l | head | tail -4” '循环,只有一个'pipe()'语句redirect标准input和标准输出。 现在我有点失落了。 N =简单命令的数目(例子中的3个:ls,head,tail)命令=命令的结构列表,如下所示: commands[0].argv[0]: ls commands[0].argv[1]: -l commands[1].argv[0]: head commands[2].argv[0]: tail commands[2].argv[1]: -4 所以,我做了for循环,并开始redirect标准input和标准输出,以连接所有的命令与pipe道,但…我只是无知,为什么它不工作。 for (i=0; i < n; i++){ pipe(pipe); if(fork()==0){ // CHILD close(pipe[0]); close(1); dup(pipe[1]); close(pipe[1]); execvp(commands[i].argv[0], &commands[i].argv[0]); perror("ERROR: "); exit(-1); }else{ // FATHER close(pipe[1]); close(0); dup(pipe[0]); close(pipe[0]); } } 我想创build的是一个childed进程的“线”: [ls -l] —- pipe […]
是否有相当于Win32 API中的Linux / Unix stdio.h popen()函数? 如果是的话,我在哪里可以find它? 编辑:我需要知道这个补丁D标准库中的遗漏。 任何答案只能使用标准的Win32 API,不能使用MSVC特定的函数。 另外,如果它存在的话,我更喜欢一些不太可怕的东西。
POSIX环境至less提供两种访问文件的方式。 有标准的系统调用open() , read() , write()和friends,但也有使用mmap()将文件映射到虚拟内存的选项。 什么时候最好使用一个呢? 他们个人的优点是什么,包括两个接口的优点?