首页 文章
  • 5 votes
     answers
     views

    在Python中发送和接收IPv6链路本地多播UDP数据报?

    以下是简单的IPv4 UDP广播,然后监听所有接口 . sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, True) sock.bind(("", 1337)) sock.sendto("hell...
  • 5 votes
     answers
     views

    共享内存中的条件变量 - 此代码是否符合POSIX标准?

    POSIX标准是否允许 named 共享内存块包含互斥锁和条件变量? 我们一直在尝试使用互斥和条件变量来同步对LynuxWorks LynxOS-SE system(POSIX-conformant)上的两个进程对命名共享内存的访问 . 一个共享内存块称为 "/sync" ,包含互斥锁和条件变量,另一个是 "/data" ,包含我们同步访问的实际数据 . 如...
  • 8 votes
     answers
     views

    退出C中的功能

    C中的 exit() , _exit() 和 _Exit() 有什么区别? 我该如何决定使用哪个? 在bash, 男子2退出 给了我页面_EXIT(2),而 男子3退出 给了页面EXIT(3) .
  • 1 votes
     answers
     views

    查找给定输入的唯一路径名

    我说我让用户指定一个指向包含一些数据的文件的路径名 . 然后我可以做 Data* pData=Open(PathName) . 现在,如果用户再次指定相同的路径名,我希望能够拥有一个已打开文件的表,只返回指向相同数据的指针: Data* pData2=GetOpenedData(PathName) . 使用简单的 std::map<std::string,Data*> 很容易实现,...
  • 0 votes
     answers
     views

    Umask的新贵`独角兽`被忽略了

    我正在使用 upstart v1.4 来启动我的应用程序服务器,它被称为unicorn . upstart 配置文件如下所示: description "Unicorn Application Server" start on network stop on runlevel [!2345] umask 0003 setuid unicorn setgid myprojec...
  • 36 votes
     answers
     views

    加载共享库时自动执行的功能

    在Windows中加载共享库时, LoadLibrary() 调用会导致库中的 DllMain 为每个新进程和线程库附加执行,并为每个进程和线程库执行detaaches . Mac OS X,Linux和其他POSIX兼容的操作系统是否有类似的机制?
  • 1 votes
     answers
     views

    我退出时为什么我的守护程序不会终止?

    我正在阅读Linux进程组和会话 . 从this site我看到: 当用户退出系统时,内核需要终止用户运行的所有进程...为了简化此任务,将进程组织为多组会话 . 会话的ID与通过setsid()系统调用创建会话的进程的pid相同 . 该过程称为该会话组的会话负责人 . 然后,所有该进程的后代都是该会话的成员,除非他们专门从中删除它们 . setsid()函数不接受任何参数并返回新的会话ID ...
  • 1 votes
     answers
     views

    共享内存段中映射数据的内存管理

    我正在研究一个在Linux系统上使用IPC共享内存的项目 . 但是,我对这些段中的内存管理有点困惑 . 我正在为这个项目使用POSIX API . 我了解如何创建共享段,并且如果您无法使用 shm_unlink() 正确删除它们,这些段将一直持续到重新启动 . 另外,我了解如何分别使用 mmap 和 munmap 进行实际映射和取消映射 . 但是,这些操作的使用以及它如何影响这些共享段中的存储数据...
  • 110 votes
     answers
     views
  • 1 votes
     answers
     views

    测量编号页面错误发生在Linux上的程序

    我正在Linux调度程序上做一个项目,试图最小化页面错误的数量 . 我已完成算法实现,我需要测量效果 . 我想知道Linux是否提供了在整个执行过程中发生的记录页数错误的工具? 基本上,我想要类似的东西 $ pfstat ./a.out page faults: 3 Execution Time: 1003 ms 有这样的工具吗?我想在决定自己写一个之前确定一下,这将是很多工作......
  • 1 votes
     answers
     views

    在Unix程序中退出状态约定

    考虑一个Unix命令 foo ,该命令逐行读取文件(或 stdin ),其中每行应遵循特定格式,例如 /etc/passwd 格式 . 如果任何行不正确(但不是全部),终止状态是 EXIT_SUCCESS 还是 EXIT_FAILURE ? 我试过参考标准, C11 Standard: 7.20.4.3 The exit functionPara 5 最后,控制权返回到主机环境 . 如果stat...
  • 0 votes
     answers
     views

    POSIX读取(2),意外行为

    我在学习测试中使用read(2)有一些问题 . 代码如下: #include <stdio.h> int main() { size_t length; read(0, &length, sizeof(length)); printf("input = %u\n", length); return 0; } 我想这个代码...
  • 3 votes
     answers
     views

    厕所关键例子中Binary Semaphore和Mutex之间的区别?

    我已经在Stackoverflow上阅读了关于此主题的帖子,但无法理解要点 . 也许我们可以将它们的差异限制在一个具体的例子 带锁的卫生间 . Mutex:一个线程接受密钥进入 . 如果任何其他线程需要进入厕所,他们等待 . 当前所有者出来并将钥匙交给警卫(OS内核),后者将厕所的船主交给另一个人 . 问题陈述:我看到所有人都同意共享资源必须由锁定它的那个线程中的相同互斥锁解锁 . 但对于二进制...
  • 0 votes
     answers
     views

    POSIX套接字:接受不同传输协议的连接?

    我想知道接受N个不同连接所需的侦听端口/服务器套接字的数量所需的最小开销是多少,每个连接使用在IP之上运行的不同传输协议,例如, TCP,SCTP,DCCP,UDP等 当然,一个直截了当的方法是拥有N个独立的服务器套接字(每个都通过调用带有相应 protocol 参数的 socket() 来创建),每个套接字都在一个唯一的端口上进行监听 . 但是,在同时使用多个协议的应用程序中实现此方法将非常不方...
  • 3 votes
     answers
     views

    为单个线程创建信号处理程序

    我想知道 sigaction 是否会为调用线程或整个进程创建一个信号处理程序 . 如果它解除阻塞信号并为整个过程创建信号处理程序,那么我怎样才能确保只有一个线程将使用信号处理程序并让其他线程阻塞信号 . 在我的情况下,我想要一个线程在报警信号关闭时调用信号处理程序而其他线程只是阻止它 . void alarmSigHandler(int signo){ } void* alarm_threa...
  • 4 votes
     answers
     views

    SIGHUP&SIGCONT

    你能否解释一下UNIX信号系统的逻辑:首先它向进程组发送SIGHUP信号然后发送SIGCONT信号,尽管SIGHUP的主要思想是“自杀,没有终端”?
  • 2 votes
     answers
     views

    获取shell进程唯一ID的POSIX或Linux方式

    我正在编写一个简单的命令行实用程序,并希望能够为父进程(即运行该命令的shell)获取某种全局唯一标识符 . PID对我来说还不够,因为随着时间的推移,两个PID值可能会发生碰撞 . 我的用例如下:我想存储运行命令行实用程序的“会话”数据,该实用程序在同一shell进程中运行的实用程序的所有实例中持续存在 . 我不希望这些数据与其他shell实例共享 . 我想要某种标识符,这将允许我执行该关联而不...
  • 3 votes
     answers
     views

    为什么在守护进程时fork()两次? [重复]

    这个问题在这里已有答案: What is the reason for performing a double fork when creating a daemon? 9个答案 我正在讨论为什么人们两次调用 fork() 以及为什么第一次调用是在 setsid() 之前执行的 . 是的,如果调用者已经是进程组负责人,则不会创建新会话 . 但是,如果我不让(大)父母成为流程组组长呢?谁会为我做...
  • 21 votes
     answers
     views

    C中的函数重载

    今天,查看 open() 的手册页,我've noticed this function is '重载': int open(const char *pathname, int flags); int open(const char *pathname, int flags, mode_t mode); 我不认为这是可能的C.实现这个目的的“诀窍”是什么? LATER EDIT:所以它并没...
  • 0 votes
     answers
     views

    为多个HTTP连接重用客户端TCP套接字

    问候所有 . 我正在Linux 2.6.29-3.ydl61.3上制作ANSI C多线程www-crawler(HTTP 1.1兼容)并且进展顺利 . 我在MySQL数据库中有'000个域来收集页面 . 我可以根据需要以保持活动模式打开爬虫中的任何/所有域 . 我使用POSIX线程,没有任何竞争或数据竞争 . 虽然目标服务器似乎已准备好允许我对每个服务器套接字上的页面发出多个并发或顺序请求(因为每...
  • 10 votes
     answers
     views

    printf是否总是在遇到换行符时刷新缓冲区?

    我的机器正在运行ubuntu 10.10,我正在使用标准的gnu C库 . 我的印象是,如果格式字符串中描述了换行符,printf会刷新缓冲区,但是下面的代码反复出现了这种趋势 . 有人可以澄清为什么缓冲区没有被刷新 . #include <stdio.h> #include <unistd.h> #include <fcntl.h> #include <...
  • 3 votes
     answers
     views

    如何确保`waitpid(-1,&stat,WNOHANG)`收集所有子进程

    从Unix网络编程Vol1第三版第5.10节提取等待和waitpid功能 #include "unp.h" void sig_chld(int signo) { pid_t pid; int stat; while ( (pid = waitpid(-1, &stat, WNOHANG)) > 0) { ...
  • 2 votes
     answers
     views

    在Linux中创建独立进程

    我想在Linux上实现类似CreateProcess的功能 . 我做了很多研究,发现"Fork off and die"方法使用双叉在init下运行子进程 . 也就是说,允许孩子独立于父母进行操作 . 因为父级需要返回有关新创建的子进程的信息(即pid,name等),所以我需要知道我的代码中是否遇到了竞争条件 . 目前,我通过管道fork并检索第二个fork的pid,然后等待第...
  • 0 votes
     answers
     views

    使用适当的POSIX信号

    我目前正在开发一个项目,该项目具有守护进程,该进程查看任务队列,运行这些任务,然后收集有关这些任务的信息 . 在某些情况下,守护程序必须“杀死”任务,如果它运行时间太长 . SIGTERM的解释是“终止信号”,但这并不是很有用 . 我想为此使用最合适的信号 . 什么是最合适的POSIX信号编号,用于告诉进程“你花了太多时间运行所以你现在需要停止”?
  • 1 votes
     answers
     views

    将整数值保存为ansi c中char的字节值

    我想将ppm文件保存为P6 . 这意味着只有字节 . 另外我想以并行方式保存它,所以这就是我使用 mmap 来映射内存的原因 . 这是我试图保存所有内容的代码的一部分: char* map; //... int offset = sprintf(map,"P6\n%d %d\n%d\n",x,y,k); int count...
  • 0 votes
     answers
     views

    时钟不准确

    我将 unistd.h 的 clock() 的值分配给两个 int 类型,如下所示: int start_time = clock(); for (i = 0; i < 1000000; i++) { printf("%d\n", i+1); } int end_time = clock(); 但是,当我打印它们的值时,实际经过的时间与显示的时间不同 . 假设时...
  • 6 votes
     answers
     views

    更改系统时间对睡眠线程的影响是什么?

    如果您查看clock_gettime()函数(该函数在所有BSD中都可用并且实际上被定义为POSIX标准的一部分),您会看到至少支持三种类型的时钟(许多系统支持的时钟超过这些时钟,但是实际上POSIX标准只要求一个存在,所有其他都是可选的): CLOCK_REALTIME - POSIX要求它存在 . 这是挂钟时钟 . CLOCK_MONOTONIC - 不知道这是什么(以及SI...
  • 0 votes
     answers
     views

    杀死父级后关闭文件子描述符?

    杀死父进程时,如何关闭子文件描述符? 我创建了一个执行以下操作的程序: 分叉2子进程 . 过程1是读者 . 它从STDIN_FILENO读取并使用scanf / printf写入STDOUT_FILENO . 但我使用dup2重定向到命名管道(让我们称之为npipe) . 过程2是作家 . 我将STDIN_FILENO重定向到npipe,以便我可以使用该管道中的scanf . 我将ST...
  • 2 votes
     answers
     views

    两个线程可以在同一个套接字上同时`send`和`recv`吗?

    我需要重复向套接字发送和接收UDP数据报 . 我的想法是产生两个线程,一个负责发送,另一个负责接收 . 只有当一个线程可以等待阻塞 recv() 而另一个线程同时在同一个套接字上执行 send() 时,整个想法才有意义 . 我做了一些谷歌搜索,发现了这个问题:Are parallel calls to send/recv on the same socket valid?接受的答案提到 send(...
  • 3 votes
     answers
     views

    断开并重新连接已连接的数据报插槽

    我试图创建一个基于数据报套接字(UDP)的迭代服务器 . 它调用连接到第一个客户端,它从第一个recvfrom()调用获得(是的,我知道这不是真正的连接) . 在为此客户端提供服务后,我断开UDP套接字(调用与AF_UNSPEC的连接)然后我调用recvfrom()从下一个客户端获取第一个数据包 . 现在问题是,在循环的第二次迭代中recvfrom()的调用返回0.我的客户端从不发送空数据包,所以...

热门问题