我刚刚发现-lmgcc需要这个标志,以便编译一个从数学库中引用函数的程序.我想知道为什么在编译包含其他库(如时间库)的程序时不需要显式链接标志.如果我编写一个time()调用该函数的程序,即使没有链接选项也可以编译没有任何问题.但是如果没有-lm旗帜,那么涉及数学库的程序将无法运行.
任何人都可以解释这种行为背后的原因吗?谢谢你的时间.
我刚刚开始使用UNIX FIFO,我在尝试第一个FIFO程序时发现了一些东西.程序以这种方式工作:创建FIFO后,使用该fork()函数启动两个进程.子进程读取父亲通过FIFO传递给他的内容,并将其打印在屏幕上.交换的数据是指定为参数的字符串.问题是:在父节中,如果我忘记关闭FIFO的输入端(意味着我排除了close(fd)行),即使正确交换了进程之间的数据,程序也会挂起.否则,一切正常,程序终止而不挂.有人可以解释一下为什么吗?
谢谢你的耐心.这是主要功能的代码:
int main(int argc, char *argv[])
{
    if(argc != 2)
    {
        printf("An argument must be specified\n");
        return -1;
    }   
    int ret = mkfifo("./fifo.txt", 0644);
    char buf;
    if(ret < 0)
    {
        perror("Error creating FIFO");
        return -1;
    }
    pid_t pid = fork();
    if(pid < 0)
    {
        perror("Error creating child process");
        return -1;
    }
    if(pid == 0) /* child */
    {
        int fd = open("./fifo.txt", O_RDONLY); /* opens the fifo in reading mode */
        while(read(fd, &buf, 1) …