linux消息队列,读而不删怎么弄

发布网友 发布时间:2022-04-23 16:13

我来回答

1个回答

热心网友 时间:2023-10-09 04:33

我用的linux as4 的操作系统,重装了oracle数据库后,以前的老数据文件和里面的文件都不能删除,并且读写和执行的权限都赋权给了oracle和root这两个账号,删除时提示为只读系统文件,请高手指点如何修改文件,能给出相应的命令最好!
msgrcv.c 内容如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <fcntl.h>
#include <sys/mman.h>
#include <errno.h>
#include <sys/ipc.h>
#include <sys/msg.h>

#define N 10
typedef struct student
{
int sno;
char sname[15];
}STU;

typedef struct msgbuf
{
long mtype;
STU stu[N];
}MSGBUF;

main(int argc, char* argv[])
{
int i = 0;
MSGBUF mbf = {0};
mbf.mtype = 1;
int MSQID ;
errno = 0;
char *name = "./msgaaa";
key_t key = ftok(name,0);
MSQID = msgget(key, IPC_CREAT);
while(i < N)
{
mbf.stu[i].sno = i;
strcpy(mbf.stu[i].sname, "hello");
if (i == 1)
{
memset(mbf.stu[i].sname, 0, strlen(mbf.stu

[i].sname));
strcpy(mbf.stu[i].sname, "aaa");
}
if (i == N-1)
{
memset(mbf.stu[i].sname, 0, strlen(mbf.stu

[i].sname));
strcpy(mbf.stu[i].sname, "end");
}
printf("------- %s ------", mbf.stu[i].sname);
msgsnd(MSQID, &mbf.stu[i], sizeof(mbf.stu[i]), 0);
if (-1 == errno)
{
perror("msgsnd");
exit(-1);
}
printf(" %d -- %s\n", mbf.stu[i].sno, mbf.stu[i].sname);
i++;
sleep(1);
}//while
msgctl(MSQID, IPC_RMID, NULL);
}

msgsnd内容如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <fcntl.h>
#include <sys/mman.h>
#include <errno.h>
#include <sys/ipc.h>
#include <sys/msg.h>

#define N 10
typedef struct student
{
int sno;
char sname[15];
}STU;

typedef struct msgbuf
{
long mtype;
STU stu[N];
}MSGBUF;

main(int argc, char* argv[])
{
int i = 0;
MSGBUF mbf = {0};
mbf.mtype = 1;
int MSQID ;
errno = 0;
char *name = "./msgaaa";
key_t key = ftok(name,0);
MSQID = msgget(key, IPC_CREAT);
while(i < N)
{
mbf.stu[i].sno = i;
strcpy(mbf.stu[i].sname, "hello");
if (i == 1)
{
memset(mbf.stu[i].sname, 0, strlen(mbf.stu[i].sname));
strcpy(mbf.stu[i].sname, "aaa");
}
if (i == N-1)
{
memset(mbf.stu[i].sname, 0, strlen(mbf.stu[i].sname));
strcpy(mbf.stu[i].sname, "end");
}
// printf("------- %s ------", mbf.stu[i].sname);
msgsnd(MSQID, &mbf.stu[i], sizeof(mbf.stu[i]), 0);
if (-1 == errno)
{
perror("msgsnd");
exit(-1);
}
printf(" %d -- %s\n", mbf.stu[i].sno, mbf.stu[i].sname);
i++;
sleep(1);
}//while
msgctl(MSQID, IPC_RMID, NULL);
}

msgsnd 显示结果:
0 -- hello
1 -- aaa
2 -- hello
3 -- hello
4 -- hello
5 -- hello
6 -- hello
7 -- hello
8 -- hello
9 -- end

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com