0

我需要执行在此页面中创建的一些示例:http: //www.chuidiang.com/clinux/ipcs/colas.php

其中之一的代码是这个:

#include <iostream.h>
#include <sys/msg.h>
#include <errno.h>

typedef struct Mi_Tipo_Mensaje
{
long Id_Mensaje;
int Dato_Numerico;
char Mensaje[10];
};

main()
{
key_t Clave1;
int Id_Cola_Mensajes;
Mi_Tipo_Mensaje Un_Mensaje;

Clave1 = ftok ("/bin/ls", 33);
if (Clave1 == (key_t)-1)
{
    cout << "Error al obtener clave para cola mensajes" << endl;
    exit(-1);
}

Id_Cola_Mensajes = msgget (Clave1, 0600 | IPC_CREAT);
if (Id_Cola_Mensajes == -1)
{
    cout << "Error al obtener identificador para cola mensajes" << endl;
    exit (-1);
}

Un_Mensaje.Id_Mensaje = 1;
Un_Mensaje.Dato_Numerico = 29;
strcpy (Un_Mensaje.Mensaje, "Hola");

msgsnd (Id_Cola_Mensajes, (struct msgbuf *)&Un_Mensaje, 
        sizeof(Un_Mensaje.Dato_Numerico)+sizeof(Un_Mensaje.Mensaje), 
        IPC_NOWAIT);

msgrcv (Id_Cola_Mensajes, (struct msgbuf *)&Un_Mensaje,
        sizeof(Un_Mensaje.Dato_Numerico) + sizeof(Un_Mensaje.Mensaje), 
        2, 0);

cout << "Recibido mensaje tipo 2" << endl;
cout << "Dato_Numerico = " << Un_Mensaje.Dato_Numerico << endl;
cout << "Mensaje = " << Un_Mensaje.Mensaje << endl;

msgctl (Id_Cola_Mensajes, IPC_RMID, (struct msqid_ds *)NULL);
    }

我正在尝试按照我提到的页面中的建议进行编译(“make”或“g++ cola1.c -o cola1”),但我收到以下消息:

fatal error: iostream.h: No such file or directory

我知道这个问题已经被问了很多,但我还不能解决它,请你给我一些见解吗?感谢您的时间和态度,

塞巴斯蒂安·帕韦斯

4

2 回答 2

3

您的代码中有很多问题。

  1. iostream.h不是 C++ 标准的一部分,您应该改为 import iostream
  2. 您永远不会将std命名空间添加到适当的函数中。您可以简单地using namespace std;在程序的开头添加该行(尽管不鼓励这样做,但请查看您最喜欢的参考什么函数存在 于 std 命名空间中,并在它们前面加上std::)。
  3. Plainmain()是错误的,它必须返回一个int. 将其更改为int main()并在函数末尾添加mainreturn 0. 正如Joachim Pileborg在评论中所建议的,您可以省略 return 语句,因为如果缺少它,编译器会添加它。
  4. cstring您使用在头文件( strcpy) 和cstdlib( )中声明的函数exit,因此包括它们:

    #include <cstring>
    #include <cstdlib>
    
  5. typedeftypedef struct Mi_Tipo_Mensaje是多余的,没有必要。去掉它。

顺便说一句:您的代码中的很多内容表明您正在编写 C++ 程序而不是 C 程序。

于 2013-04-30T20:29:18.023 回答
0

C++ 标准头文件名不以.h. 只需使用#include <iostream>.

于 2013-04-30T20:11:41.837 回答