导航:首页 > 编程系统 > linuxmkfifo

linuxmkfifo

发布时间:2021-10-12 01:18:24

linux shell脚本怎么创建命名管道

man mkfifo

Create named pipes (FIFOs) with the given NAMEs.

② linux mkfifo函数设置的访问权限0666是什么意思

1.功能 将数据写入已打开的文件内 2.相关函数 open,read,fcntl,close,lseek,sync,fsync,fwrite 3.表头文件 #include 4.定义函数 ssize_t write (int fd,const void * buf,size_t count); 5.函数说明 write()会把参数buf所指的内存写入cou...

③ 为什么在linux终端输入man -a mkfifo之后,按q键不是直接到下一个mkfifo模块,而是到下面图片这种状态

就多设置按q键时 的几个选项而已,你认真看选项嘛,制作发行版本的人可能考虑到,
你有可能不想看下一个模块,你可以按Ctrl-C退出,也可以按Ctrl-D跳过下一模块,
也可以直接看,敲回车就可以看了

④ linux 打开fifo文件失败

打开fifo的权限没有设置,修改后的代码

#include<fcntl.h>
#include<errno.h>
#include<unistd.h>
#include<stdio.h>
#defineFIFO_SERVER"/tmp/fifoserver"
#defineBUFFERSIZE80
intmain()
{
intfd;
if((mkfifo(FIFO_SERVER,O_CREAT|O_EXCL|660)<0)&&(errno!=EEXIST))
{
printf("cannotcreatefifoserver! ");
exit(-1);
}
printf("fifoservercreatesuceessfully! ");
intpid;
pid=fork();
if(pid==0)
{
char*bewrite="Hello,world!";
fd=open(FIFO_SERVER,O_WRONLY,0);
if(fd<0)
{
printf("child:cannotopenfifoserver! ");
exit(-1);
}
intwtnum;
wtnum=write(fd,bewrite,strlen(bewrite));
if(wtnum<0)
{
printf("fifoserverwriteerror! ");
exit(-1);
}
printf("fifoserverwritesuccessfully! ");
close(fd);
}
elseif(pid>0)
{
charbuf[BUFFERSIZE+1];
fd=open(FIFO_SERVER,O_RDONLY,0);
if(fd<0)
{
printf("parent:cannotopenfifoserver! ");
exit(-1);
}
printf("beforeread(),bufhasnodata. ");
intrdnum;
rdnum=read(fd,buf,BUFFERSIZE);
if(rdnum<0)
{
printf("fifoserverreaderror! ");
exit(-1);
}
buf[rdnum]=0;
printf("afterread(),bufhasdata: %s ",buf);
close(fd);
}
elseif(pid<0)
{
printf("forknewprocesserror! ");
exit(-1);
}
return0;
}

⑤ linux中fifo管道

这是OS/2操作系统下的一个系统调用.
原型如下:
DosCreateNPipe (PSZ pszName, PHPIPE pHpipe, ULONG openmode,
ULONG pipemode, ULONG cbOutbuf, ULONG cbInbuf, ULONG msec)
pszName
管道的名字
pHpipe
管道句柄。
openmode
一组标志,定义了打开管道时的模式。
pipemode
一组标志,定义了管道的模式。
cbOutbuf和 cbInbuf
出入buf
msec
等待有名管道实例变为可用时等待的最长时间,单位是毫秒。

"\\pipe\\gtemp"是创建的命名管道的对象名字,像在Windows2000内核里边,命名管道是一种内核对象,所有的内核对象都由对象管理器来管理,而且是一种树状的,就像文件夹那样一层一层的,在Windows下在Softice里输入objdir就可以查看内核对象。
你创建一个NamedPipe,当然要放在\pipe下边了
至于为什么用"\\",你应该知道C语言里边"\"是转义符啊,前一个\是转义符,这是基本的C语言常识了
就像在Windows下用CreateFile新建一个文件,文件名要写"C:\\xxx\\yyy\\newfile.txt"这样
还有HPIPE,这是管道句柄,调用这个函数成功后,返回的管道句柄就放在hpipe里,以后就可以用这个句柄来读写这个命名管道了。
这个DosCreateNPipe类似于Windows下的CreateNamedPipe、Linux下的mkfifo
下边是CreateNamedPipe的原型,和DosCreateNPipe是比较像的,只不过返回的管道句柄放在返回值里:
HANDLE CreateNamedPipe(
LPCTSTR lpName,
DWORD dwOpenMode,
DWORD dwPipeMode,
DWORD nMaxInstances,
DWORD nOutBufferSize,
DWORD nInBufferSize,
DWORD nDefaultTimeOut,
LPSECURITY_ATTRIBUTES lpSecurityAttributes
);

⑥ linux 下打开管道错误

mkfifo的第二个参数是mode, 不是flags,
用 S_IRUSR|S_IWUSR 就可以了

⑦ 如何判断linux管道是否为空

1、要看你如何open的这个fifo。
如果open的 mode参数指定了O_NONBLOCK这个参数,那么管道是非阻塞的,否则就是阻塞的。
2、阻塞管道。 通过read读入数据,如果管道中没有数据,这时候read就是阻塞直到管道那头写入数据,或者管道那头关闭了,read()才会继续。
3、非阻塞管道。这种管道read()管道,无论是否有数据都会立刻返回,但是如果没有数据的话read()函数返回EAGAIN 或者 EWOULDBLOCK,这时候你判断一下返回值就能知道这个管道是否不是空了。

学习Unix/Linux建议看《Unix环境高级编程》《Unix网络编程》这两本书,都我们敬爱的Stevens先驱写的。

⑧ Linux系统中mkfifo创建管道后,调用open打开失败,不知道错在哪儿

进程间通信之FIFO,在阻塞模式下,只有当读和写模式都打开时才返回,否则一直阻塞;

非阻塞模式下,当读端没打开,则打开写端无效,返回错误。

建议你读一读UNP卷2。

⑨ linux中 mkfifo干什么的

相关函数
pipe,popen,open,umask
表头文件
#include
#include
定义函数
int mkfifo(const char * pathname,mode_t mode);
函数说明
mkfifo()会依参数pathname建立特殊的FIFO文件,该文件必须不存在,而参数mode为该文件的权限(mode%~umask),因此 umask值也会影响到FIFO文件的权限。Mkfifo()建立的FIFO文件其他进程都可以用读写一般文件的方式存取。当使用open()来打开 FIFO文件时,O_NONBLOCK旗标会有影响
1、当使用O_NONBLOCK 旗标时,打开FIFO 文件来读取的操作会立刻返回,但是若还没有其他进程打开FIFO 文件来读取,则写入的操作会返回ENXIO 错误代码。
2、没有使用O_NONBLOCK 旗标时,打开FIFO 来读取的操作会等到其他进程打开FIFO文件来写入才正常返回。同样地,打开FIFO文件来写入的操作会等到其他进程打开FIFO 文件来读取后才正常返回。
返回值
若成功则返回0,否则返回-1,错误原因存于errno中。
错误代码
EACCESS 参数pathname所指定的目录路径无可执行的权限
EEXIST 参数pathname所指定的文件已存在。
ENAMETOOLONG 参数pathname的路径名称太长。
ENOENT 参数pathname包含的目录不存在
ENOSPC 文件系统的剩余空间不足
ENOTDIR 参数pathname路径中的目录存在但却非真正的目录。
EROFS 参数pathname指定的文件存在于只读文件系统内。

示例1:
#include
#include
#include
#include

int main(void)
{
char buf[80];
int fd;
unlink( "zieckey_fifo" );
mkfifo( "zieckey_fifo", 0777 );

if ( fork() > 0 )
{
char s[] = "Hello!\n";
fd = open( "zieckey_fifo", O_WRONLY );
write( fd, s, sizeof(s) );
//close( fd );
}
else
{
fd = open( "zieckey_fifo", O_RDONLY );
read( fd, buf, sizeof(buf) );
printf("The message from the pipe is:%s\n", buf );
//close( fd );
}

return 0;
}
执行
hello!

示例2:
#include
#include
#include
#include
#include

int main( int argc, char **argv )
{
mode_t mode = 0666;
if ( argc !=2 )
{
printf( "Usage:[%s] fifo_filename\n", argv[0] );
return -1;
}

if (mkfifo( argv[1], mode)<0 )
{
perror( "mkfifo");
return -1;
}

return 0;
}

阅读全文

与linuxmkfifo相关的资料

热点内容
网络中常用的传输介质 浏览:518
文件如何使用 浏览:322
同步推密码找回 浏览:865
乐高怎么才能用电脑编程序 浏览:65
本机qq文件为什么找不到 浏览:264
安卓qq空间免升级 浏览:490
linux如何删除模块驱动程序 浏览:193
at89c51c程序 浏览:329
怎么创建word大纲文件 浏览:622
袅袅朗诵文件生成器 浏览:626
1054件文件是多少gb 浏览:371
高州禁养区内能养猪多少头的文件 浏览:927
win8ico文件 浏览:949
仁和数控怎么编程 浏览:381
项目文件夹图片 浏览:87
怎么在东芝电视安装app 浏览:954
plc显示数字怎么编程 浏览:439
如何辨别假网站 浏览:711
宽带用别人的账号密码 浏览:556
新app如何占有市场 浏览:42

友情链接