Tag: unix

在冒险游戏中随机连接房间

我有以下代码,我随机创建7个房间名称,并给他们一个类型(开始,中间,结束)。 我现在需要随机连接这些房间,每个房间有3到6个连接。 我无所适从。 我找到了一个如何使用bitcode做的例子,但在我的其他post中,我仍然不明白那个版本。 如果有人可以提供帮助,那将非常感激。 以下是房间的相关代码: 这是我宣布房间的地方: void createRooms(char *dir) { //Name of rooms char *roomNames[] = { “a”, “b”, “c”, “d”, “e”, “f”, “g”, “h”, “i”, “j” }; //Filenames for each room char *filenames[] = { “a.txt”, “b.txt”, “c.txt”, “d.txt”, “e.txt”, “f.txt”, “g.txt”, “h.txt”, “i.txt”, “j.txt” }; int rooms[] = {0, 1, 2, 3, […]

管道流和子进程

我需要编写我的管道流。 我的程序应该获取另一个程序的名称并调用它们,第一个程序应该从第一个输出的stdin读取第二个等等。 最后一个程序在stdout中打印结果。 问题是它不起作用。 当我把这个程序称为另外两个简单程序时(它们都是读取x并打印2 * x,而它可以读取),并给它一些数据,我想我应该立即得到结果,但我没有。 更重要的是,当我给它文件结束它没有反应。 不要注意safe_ *函数,它们与标准相同,但检查错误。 帮帮我,请=) #include #include #include #include #include #include #include #include “error.h” #include “safe_functions.h” void call(const char *filename, int in_descr, int out_descr, pid_t *sons, int n) { sons[n] = safe_fork(); if(sons[n] == 0) { safe_dup2(in_descr, STDIN_FILENO); safe_dup2(out_descr, STDOUT_FILENO); safe_execv(filename, (char **)NULL); } } int find_num(pid_t * sons, […]

如何在vxworks或linux上取消阻止的read / recvfrom系统调用

在任务I中 : … while (1) { if (running == false) break; ret = read(fd, buf, size); /* Or: ret = recvfrom(sock, buf, size, 0, NULL, NULL); */ … } 在任务II中 : … running = true; /* ioctl(fd, FIOCANCEL, 0); */ close(fd); /* Or: close(sock);*/ 在任务II中应该做什么来取消被阻止的任务我 , 在vxworks中 ,有一个函数ioctl(fd, FIOCANCEL, 0)来取消阻塞的读取或写入,但它无法工作。 可能是因为司机不能支持“FIOCANCEL” 。 如何在vxworks和linux中编写任务II? 或者还有其他办法来完成我的任务吗?

C:设置伪终端并使用xterm打开

以下简化的代码段由后台的线程执行。 该线程一直运行,直到他被告知退出(通过用户输入)。 在下面的代码中,我删除了一些错误检查以获得更好的可读性。 即使进行错误检查,代码也能很好地工作,并且创建和/或打开主设备和从设备。 … int master, slave; char *slavename; char *cc; master = posix_openpt(O_RDWR); grantpt(master); unlockpt(master); slavename = ptsname(master); slave = open(slavename, O_RDWR); printf(“master: %d\n”,master); printf(“slavename: %s\n”,slavename); 在我的机器上输出如下: master: 3 slavename: /dev/pts/4 所以我认为在程序运行时用命令xterm -S4/3 (4 = pt-slave,3 = pt-master)打开一个xterm应该为创建的伪终端打开一个新的xterm窗口。 但xterm只是开始运行而没有给出错误或任何进一步的信息,但根本没有打开一个窗口。 有什么建议吗? 编辑: 现在有了Wumpus Q.Wumbley的帮助xterm正常启动,但我无法将任何输出重定向到它。 我试过了: dup2(slave, 1); dup2(slave, 2); printf(“Some test message\n”); 用fopen然后使用fprinf fopen […]

在C中显示正在运行的进程列表

你能建议我检查当前正在运行的进程的系统调用吗? (我必须写一个像顶部的C函数) 我试图读取proc/文件夹,但在我的情况下并不好。

程序通过Ubuntu上的C程序显示所有登录用户?

我有一个名为allloggedin.c程序,其目的是显示所有登录的用户。 每当我尝试在终端上运行它(使用gcc)时,它会给出错误“Segmentation fault(core dumped)”。 #include #include #include int main(void) { struct utmp *n; char *a; int i; setutent(); n=getutent(); while(n!=NULL) { if(n->ut_type==7) { printf(“%9s”,n->ut_user); printf(“%12s”,n->ut_line); printf(” “); for(i=4;iut_host); printf(“)”); printf(“\n”); } n=getutent(); } } 有人可以解释一下这个程序吗?

声明char数组会导致execv()无效

我编写了以下代码,以便在c unix中使用管道: #include #include #include #include #include int main () { int fds[2]; pid_t pid; /* Create a pipe. File descriptors for the two ends of the pipe are placed in fds. */ pipe (fds); /* Fork a child process. */ pid = fork (); if (pid == (pid_t) 0) { //char abc[10]; – **Uncommenting […]

接收UDP数据包时是否可以读取TTL IP头字段?

我正在使用UDP套接字发送数据包,我想检查收到的数据包的IP头中的TTL字段。 可能吗? 我注意到IP_HDRINCL sockoption但它似乎只适用于RAW套接字。

如何阻止文件描述符?

给定一个任意文件描述符,如果它是非阻塞的,我可以阻止它吗? 如果是这样,怎么样?

unix信号如何工作?

信号如何在unix中工作? 我经历了WR史蒂文斯,但无法理解。 请帮我。