首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C:在具有O_CREAT和正确信号量名称的sem_open上没有这样的文件或目录

在具有O_CREAT和正确信号量名称的sem_open上没有这样的文件或目录是一个错误信息,它表示在使用sem_open函数创建一个具有指定名称的信号量时,找不到对应的文件或目录。

sem_open是一个用于创建或打开一个具有指定名称的信号量的函数。它的原型如下:

代码语言:c
复制
#include <fcntl.h>
#include <sys/stat.h>
#include <semaphore.h>

sem_t *sem_open(const char *name, int oflag, mode_t mode, unsigned int value);

参数说明:

  • name:信号量的名称,可以是以"/"开头的绝对路径,也可以是不以"/"开头的相对路径。
  • oflag:打开标志,可以使用O_CREAT、O_EXCL等标志。
  • mode:创建信号量时的权限。
  • value:信号量的初始值。

当使用O_CREAT标志时,如果指定的信号量名称不存在,则会创建一个新的信号量。但是,如果在指定的路径中找不到对应的文件或目录,就会出现上述错误信息。

解决该问题的方法是确保指定的路径存在,并且具有正确的权限。可以使用mkdir命令创建目录,或者使用touch命令创建一个空文件。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Linux进程间通信(五) - 信号灯(史上最全)及其经典应用案例

按实现方式,信号灯分为POSIX信号灯System V信号灯,System V信号灯是由内核维护,Posix信号灯是由文件系统中路径名对应名字来标识。...目前Linux中,System V使用更为广泛,POSIX一般是更老系统中使用。 信号灯操作 进程信号灯几种操作: 1) 创建一个信号灯。还要求调用者指定初始值,对二值来说通常是1。...信号灯有一个与之关联值,挂出一个信号即使当前没有线程等待该信号也没关系,与之相反是,pthread_cond_signal如果当时没有任何线程阻塞在pthread_cond_wait中,则信号丢失...0000004 POSIX基于内存信号灯 POSIX基于内存信号灯sem_waitsem_postPOSIX有名信号灯是同一个实现,唯一不同在于构造析构是在内存中进行,而不是基于文件系统某个路径名...它将使得操作系统跟着当前进程对这个信号量修改情况,如果这个进程没有释放该信号量情况下终止,操作系统将自动释放该进程持有的信号量

2K70

多线程中避免使用信号量

项目中遇到一个bug,因为接入了几家越狱平台:91、同步推、PP助手,设备安装了三个应用,启用其中任意一个,另外二个启动后无法创建发送socket消息,从而导致游戏直接死登录那里,再次点击登录时线程才会被唤醒...(无法发送原因定位到,是因为调用sem_post方法后无法将线程唤醒)。...之后我尝试将信号量改为条件变量,就再也没有遇到那个问题了。...《并发编程 15 条建议(译)》也提及如果Mutex就能解决问题,就不要使用信号量semaphore。...关于使用信号量容易出错例子,这里倒有一个:关于sem_open(3),所有信号量这种东东最好不要在线程内使用,进程间通信就要好好去研究它了… 附:sem_openman手册链接>>

1.8K30
  • Linux 进程间通信:信号量

    0值操作:对计数器没有影响,而且要求对进程对信号量必须有读权限。实际这个行为是一个“等待计数器为0”操作:如果计数器值为0,则操作可以立即返回。..., unsigned int value); 使用sem_open来创建访问一个已经创建POSIX信号量。...XSI信号量中,对计数器减操作都是通过semop方法一个sembuff结构体来实现,但是POSIX中则给出了更清晰定义:使用sem_post函数可以增加信号量计数器值,使用sem_wait...跟POSIX共享内存类似,信号量也会在/dev/shm目录下创建一个文件,如果有这个文件名就是一个命名信号量。其它进程可以通过这个文件名来通过sem_open方法使用这个信号量。...匿名内存初始化方法跟sem_open不一样,sem_init要求对一段已有内存进行初始化,而不是/dev/shm下产生一个文件

    6.7K01

    POSIX共享内存

    很大程度上提高了系统效率代码简洁性。 使用mmap函数主要目的是: 对普通文件提供内存映射I/O,可以提供无亲缘进程间通信; 提供匿名内存映射,以供亲缘进程间进行通信。  ...Linux 2.4以后,mmap提供匿名内存映射机制,即将mmapflags参数指定为:MAP_SHARED | MAP_ANON。这样就彻底避免了内存映射文件创建和打开,简化了对文件操作。...open以及其他POSIX IPCxxx_open函数不同是,该参数必须一直存在,如果oflag参数中没有O_CREAT标志,该位可以置0; shm_unlink用于删除一个共享内存区对象,跟其他文件...POSIX共享内存POSIX消息队列,有名信号量一样都是具有随内核持续性特点。 下面是通过POSIX共享内存进行通信测试代码,代码中通过POSIX信号量来进行进程间同步操作。...Linux 2.6.18中,对于POSIX信号量共享内存名字会在/dev/shm下建立对应路径名,例如上面的测试代码,会生成如下路径名: # ll /dev/shm/ total 8 -rw-r

    2.8K10

    POSIX之semaphore

    不过VxWorks实现这个功能时,留了一个小bug:返回值仅表示有无阻塞,但跳过了对任务数量统计 sem_open - 创建打开名字非NULLsemaphore。...oflag取值O_CREAT,表示semaphore不存在则创建;此时sem_init()需提供第三个参数(未用到)第四个参数(value);若同时使用O_EXCL,表示semaphore已存在则报错...如果没有task阻塞,则value加一,否则将优先级最高一个task置为Ready 有没有发现这个semaphore与VxWorks计数信号量非常非常相似,对比一下,如下图 其实semaphore...就是用计数信号量封装,因此需要移植VxWorks下代码到其它OS时,替换相应API即可。...而且,将semaphore声明为public object后,也可以用它实现进程间通信 VxWorks还提供了二进制信号量,更适用于多数情况同步

    82220

    linux网络编程之System V 信号量(一):封装一个信号量集操作函数工具

    4、当正确执行了semop 函数,则信号量集中每个信号量sempid 参数都被设置为改变此信号量进程pid。...,它们用法创建文件时使用mode模式标志是一样 返回值:成功返回一个非负整数,即该信号量标识码;失败返回-1 功能:用于控制信号量集 原型 int semctl(int semid...GETVAL  获取信号量集中信号量计数值 IPC_STAT 把semid_ds结构中数据设置为信号量集的当前关联值 IPC_SET 进程有足够权限前提下,把信号量集的当前关联值设置为...当然+-n 0 都是允许。...sem_flag:两个取值是IPC_NOWAITSEM_UNDO,设为前者如果当某个信号量资源为0时进行P操作,此时不会阻塞等待,而是直接返回资源不可用错误;设为后者,当退出进程时对信号量资源操作撤销

    1.7K00

    线程间同步几种方式

    有名信号量 可以用于不同进程间或多线程间互斥与同步 创建打开有名信号量 sem_t *sem_open(const char *name, int oflag); sem_t *sem_open(const...,但不能写成/tmp/a.sem这样形式,因为linux下,sem都是/dev/shm目录下,可写成"/mysem""mysem",创建出来文件都是"/dev/shm/sem.mysem",mode...发送信号时,如果没有线程等待在该条件变量,那么信号将丢失;而信号量有计数值,每次信号量post操作都会被记录。 1....信号量有计数值,每次信号量post操作都会被记录,而条件变量发送信号时,如果没有线程等待该条件变量,那么信号将丢失。 读写锁 读写锁与互斥量类似,不过读写锁允许更高并行性。...函数把调用线程放到等待条件线程列表, 然后对互斥量解锁, 这两个操作是原子. 这样便关闭了条件检查线程进入休眠状态等待条件改变这两个操作之间时间通道, 这样线程就不会错过条件任何变化.

    3.9K00

    linux驱动开发中copy_from_user open read write等常用函数总结

    ,可以包含(绝对相对)路径 flags:文件打开模式 mode: 用来规定对该文件所有者,文件用户组及系统中其他用户访问权限,则文件权限为:mode&(~umask) 函数说明: 参数pathname...S_IRWXU00700 权限,代表该文件所有者具有可读、可写及可执行权限。 S_IRUSR S_IREAD,00400权限,代表该文件所有者具有可读取权限。...**S_IWUSR S_IWRITE,00200 **权限,代表该文件所有者具有可写入权限。 S_IXUSR S_IEXEC,00100 权限,代表该文件所有者具有可执行权限。...错误代码: EEXIST 参数pathname 所指文件已存在,却使用了O_CREATO_EXCL旗标。 EACCESS 参数pathname所指文件不符合所要求测试权限。...唯一正确做法还是将第三参数设为(strlen(p1) - len,这样当write到p1末尾时(strlen(p1) - len将会变为0,此时符合附加说明(1)中所说情况,write返回0, write

    1.3K30

    UNIX IPC

    消息放入一个空队列中,且已有进程注册通知,只有没有其他进程使用 mq_receive 阻塞等待情况下通知会发出。 消息通知发出后,注册即被撤销,需要重新注册通知(读取消息前重新注册)。...Posix 信号量 Posix 提供有名信号量基于内存(共享内存)无名信号量。 下图可见两种信号量接口函数调用差别 ?...posix_sem 有名信号量 如 消息队列一节中类似, 通过以下接口打开已经存在或者创建不存在信号量O_CREAT, 并指定后面两个参数), 函数调用成功, 返回指向信号量指针供后续函数使用,...使用完一个无名信号量后,调用sem_destroy摧毁它。这里要注意是:摧毁一个有线程阻塞在其信号量行为是未定义。...PROT_NONE 数据不可访问 flag 必须指定MAP_SHARED(修改所有进程可见,改变了底层支撑对象)或者 MAP_PRIVATE(修改只对该进程有效,不改变其底层支撑对象)其中一个, 并可选择性

    1.4K20

    C语言中open函数「建议收藏」

    pathname 是待打开/创建文件路径名(如 C:/cpp/a.cpp);oflag 用于指定文件打开/创建模式,这个参数可由以下常量(定义于 fcntl.h)通过逻辑构成。   ...不影响读取新写入数据   前提下,不等待文件属性更新。   ...S_IRWXU 00700 权限,代表该文件所有者具有可读、可写及可执行权限。   S_IRUSR S_IREAD, 00400权限,代表该文件所有者具有可读取权限。   ...S_IWUSR S_IWRITE,00200 权限,代表该文件所有者具有可写入权限。   S_IXUSR S_IEXEC, 00100 权限,代表该文件所有者具有可执行权限。   ...错误代码   EEXIST 参数pathname 所指文件已存在,却使用了O_CREATO_EXCL旗标。   EACCESS 参数pathname所指文件不符合所要求测试权限。

    6.1K20

    Linux系统-基础IO

    对于不同外设也就有不同读写方式 OS要管理硬件设备无非是先描述再组织,由此将属性以及读写操作构成一个结构体,而文件其本身也是属性加读写操作,这样就由文件结构体同一管理文件(包括外设) C...从设备读取数据 由此将普通文件硬件设备管理组织好,所以对于Linux来说:一切皆文件 为什么C语言默认打开这三个输入输出流: 不仅仅是C语言会默认打开这三个输入输出流文件,几乎是任何语言都会这样...,目录inode结构当中存储就是目录属性信息,比如目录大小、目录拥有者等;目录也有自己内容,目录数据块当中存储就是该目录文件名以及对应文件inode指针 注: 每个文件文件名并没有存储自己...,有独立inode,而硬链接没有独立inode 软链接相当于快捷方式,硬链接本质没有创建文件,只是建立了一个文件已有的inode映射关系,并写入当前目录 六、动静态库 概念:...,缺点是程序体积比较大,浪费系统空间资源,但是如果库缺失不影响程序运行 示例: 注:编译时默认是动态编译,加上-static选项则是静态编译 库文件名称引入库名称: 如:libc.so

    1.5K40

    打开文件open()函数使用方法详解

    S_IRWXU00700 权限, 代表该文件所有者具有可读、可写及可执行权限. S_IRUSR S_IREAD, 00400 权限, 代表该文件所有者具有可读取权限....S_IWUSR S_IWRITE, 00200 权限, 代表该文件所有者具有可写入权限. S_IXUSR S_IEXEC, 00100 权限, 代表该文件所有者具有可执行权限....错误代码: EEXIST 参数pathname 所指文件已存在, 却使用了O_CREAT O_EXCL 旗标. EACCESS 参数pathname 所指文件不符合所要求测试权限....EROFS 欲测试写入权限文件存在于只读文件系统内. EFAULT 参数pathname 指针超出可存取内存空间. EINVAL 参数mode 不正确....附加说明:使用 access()作用户认证方面的判断要特别小心, 例如在access()后再作open()空文件可能会造成系统安全问题.

    1.9K60

    【Linux】基础IO --- 系统级文件接口、文件描述符表、文件控制块、fd分配规则、重定向…

    2.文件=内容+属性 3.文件操作=对内容操作or对属性操作or对内容属性操作 4.标识一个文件必须有文件路径和文件名,因为这具有唯一性。...5.如果没有指明对应文件路径,默认是在当前路径下进行文件访问,也就是在当前进程工作目录下进行文件访问。如果想要改变这个目录,可以通过系统调用chdir来改变。...创建目录命令mkdir,目录起始权限默认是0777,创建文件命令touch,文件起始权限是0666,这些命令实现实际是要调用系统接口open,并且创建文件目录时候要在open第三个参数中设置文件起始权限...所以C语言中打开文件时,使用打开方式为w,底层open接口中,要用三个宏参数O_WRONLY,O_CREAT,O_TRUNC来实现。...C语言中a打开方式,系统底层实现只需要将O_TRUNC替换为O_APPEND即可。 可见库函数系统调用关系,本质就是库函数封装系统调用。 2.3 read 1.

    1.2K30

    运维利器之万能 strace

    上层目录都是存在。手工创建 log 子目录后,服务就能正常启动了。 回过头来, strace 究竟能做什么呢?它能够打开应用进程这个黑盒,通过系统调用线索,告诉你进程大概干嘛。...比如我们要跟踪 ls -lh /var/log/messages 这个命令执行,可以这样: strace ls -lh /var/log/messages 另外一种运行模式,是跟踪已经在运行进程,不中断进程执行情况下...-f 跟踪目标进程,以及目标进程创建所有子进程 -e 控制要跟踪事件跟踪行为,比如指定要跟踪系统调用名称 -o 把strace输出单独写到指定文件 -s 当系统调用某个参数是字符串时,最多输出指定长度内容...我们通过strace-c选项来分别统计两种版本系统调用情况其所花时间(使用-f同时统计子进程情况)。...熟悉常用系统调用,能够更好地理解使用 strace。 当然,万能 strace 也不是真正万能。当目标进程卡死在用户态时,strace 就没有输出了。

    2.5K10

    linux网络编程之posix 线程(三):posix 匿名信号量与互斥锁 示例生产者--消费者问题

    一、posix 信号量 信号量概念参见这里。前面也讲过system v 信号量,现在来说说posix 信号量。...需要用sem_open 函数创建打开,PV操作分别是sem_wait sem_post,可以使用sem_close 关闭,删除用sem_unlink。...匿名信号量必须用sem_init 初始化,sem_init 函数其中一个参数pshared决定了线程共享还是进程共享,也可以用sem_post sem_wait 进行操作,共享内存释放前,匿名信号量要先用...没有获得锁线程只能等待而不能访问共享数据,这样“读-修改-写”三步操作组成一个原子操作,要么都执行,要么都不执行,不会执行到中间被打断,也不会在其它处理器并行做这个操作。...自旋锁与互斥锁很重要一个区别在于,线程申请自旋锁时候,线程不会被挂起,它处于忙等待状态,一般用于等待时间比较短情形。

    1.5K00

    【Linux】基础IO

    当我们把fopen,fclose,fread,fwrite等接口写完后,代码完成编译,形成二进制可执行程序后,但是没有被运行,文件对应操作有没有被执行——没有,对文件操作,本质是:进程对文件操作...文件大体分为:a.被打开文件,b.没有被打开文件(这部分组成我们文件系统)。 总结:文件操作本质:进程被打开文件之间关系。...,因此我们一定要在打开文件之后,对文件指针进行有效性检查 注2:对于打开进行更新文件(包含“+”号文件),允许输入输出操作,写入操作之后读取操作之前,应刷新(fflush)重新定位流(fseek...此计数可以与预期项目数匹配,也可以由于匹配失败、读取错误文件末尾到达而减少(甚至为零)。 如果发生读取错误或在读取时到达文件末尾,则会设置正确指示器(feof ferror)。...返回成功读取元素总数。 如果此数字与 count 参数不同,则表示读取时发生读取错误到达文件末尾。在这两种情况下,都会设置正确指标,可以分别用 ferror feof 进行检查。

    12310

    Linux-基础IO

    其实是通过该进程一项属性数据来判断所处路径,我们可以查询该进程pid,proc目录下进行查看该进程:   cwd表示该进程当前所处工作目录,exe表示可执行程序所处路径。...注意:并不是只有C语言有此特性,其他语言例如C++cout、cin也具有标准流。这种特性并不是有语言层面提供,而是由操作系统提供。...; 参数含义 pathname:表示 需要传入文件路径,当只有文件时候,表示子在当前目录打开创建该文件。...我们最开始学习Linux指令时候使用过重定向功能,而重定向无外乎 输入重定向 输出重定向。   重定向原理是,将原本需要输入或者输出对象文件变为指定对象文件。   ...缓冲区本质是一块内存区域,而缓冲区分为系统层缓冲区语言层缓冲区,C语言中缓冲区被封装在FILE结构体内,每一个文件都有自己缓冲区。  缓冲区满了会刷新到内核中,而 刷新本质就是写入。

    10110

    Linux世界中追寻伟大One Piece】进程间通信

    进程控制:有些进程希望完全控制另一个进程执行(如Debug进程),此时控制进程希望能够拦截另一个进程所有陷入异常,并能够及时知道它状态改变。...1.3.3 -> POSIX IPC 消息队列 共享内存 信号量 互斥量 条件变量 读写锁 2 -> 管道 2.1 -> 什么是管道 管道是Unix中最古老进程间通信形式。...管道使用和文件一致,迎合了"Linux一切皆文件思想"。...如果所有管道写端对应文件描述符被关闭,则read返回0。 如果所有管道读端对应文件描述符被关闭,则write操作会产生信号SIGPIPE,进而可能导致write进程退出。...4 -> 管道特点 只能用于具有共同祖先进程(具有亲缘关系进程)之间进行通信;通常,一个管道由一个进程创建,然后该进程调用fork,此后父、子进程之间就可应用该管道。 管道提供流式服务。

    6610

    本文帮你Unix玩转C语言

    多进程读同一个文件没有问题,但是写同一个文件会有问题->原子操作。 open中用O_CREATO_EXCL可以将测试创建合并为一个原子操作。...fcntl(..)返回值命令有关,可以返回文件状态,文件描述符。可以修改文件状态。 5temp表示文件描述符5打开文件供读写。 终端I/O是 ioctl最大使用方面。...文件访问权限:第一个规则是我们用名字打开一个文件时,对该名字包含每一个目录,包括她可能隐含的当前工作目录(./)都应具有执行权限。对文件有适当权限,取决于以何种方式打开。...目录设置了粘住位,只有对目录有写权限加上1.拥有文件;2.拥有目录;3.root三种之一 才可以删除更名目录文件。...使用信号量【实际是同步原语而不是IPC】,先创建一个包含一个成员信号量集合,信号量值赋初值1.分配资源时sem_op为-1调用semop,释放资源sem_op为1调用semop。

    84210
    领券