@@ -20,18 +20,19 @@ struct msgbuf {
20
20
21
21
// 打印使用帮助信息
22
22
void usage () {
23
- printf ("Usage:./ipc_msg_queue [-r|-w] [--dates <date>] [--pns <pns>] [--channelList <channels>]\n" );
23
+ printf ("Usage:./ipc_msg_queue [-r|-w] [--dates <date>] [--pns <pns>] [--channelList <channels>] [--jobName <jobName>] \n" );
24
24
printf ("Options:\n" );
25
25
printf (" -r, --read Read from the message queue\n" );
26
26
printf (" -w, --write Write to the message queue\n" );
27
27
printf (" -d, --dates Specify date\n" );
28
28
printf (" -p, --pns Specify pns\n" );
29
29
printf (" -c, --channelList Specify channel list\n" );
30
+ printf (" -j, --jobName Specify job name\n" );
30
31
exit (EXIT_FAILURE );
31
32
}
32
33
33
34
// 格式化消息并返回消息长度
34
- int formatMessage (char * buffer , const char * date , const char * pns , const char * channelList ) {
35
+ int formatMessage (char * buffer , const char * date , const char * pns , const char * channelList , const char * jobName ) {
35
36
int offset = 0 ;
36
37
int dateLen = strlen (date );
37
38
* ((int * )(buffer + offset )) = dateLen ;
@@ -51,11 +52,17 @@ int formatMessage(char *buffer, const char *date, const char *pns, const char *c
51
52
strcpy (buffer + offset , channelList );
52
53
offset += channelListLen ;
53
54
55
+ int jobNameLen = strlen (jobName );
56
+ * ((int * )(buffer + offset )) = jobNameLen ;
57
+ offset += sizeof (int );
58
+ strcpy (buffer + offset , jobName );
59
+ offset += jobNameLen ;
60
+
54
61
return offset ;
55
62
}
56
63
57
64
// 解析读取到的消息
58
- void parseReceivedMessage (const char * buffer , char * date , char * pns , char * channelList ) {
65
+ void parseReceivedMessage (const char * buffer , char * date , char * pns , char * channelList , char * jobName ) {
59
66
int offset = 0 ;
60
67
int dateLen = * ((int * )(buffer + offset ));
61
68
offset += sizeof (int );
@@ -73,21 +80,30 @@ void parseReceivedMessage(const char *buffer, char *date, char *pns, char *chann
73
80
offset += sizeof (int );
74
81
strncpy (channelList , buffer + offset , channelListLen );
75
82
channelList [channelListLen ] = '\0' ;
83
+ offset += channelListLen ;
84
+
85
+ int jobNameLen = * ((int * )(buffer + offset ));
86
+ offset += sizeof (int );
87
+ strncpy (jobName , buffer + offset , jobNameLen );
88
+ jobName [jobNameLen ] = '\0' ;
89
+ offset += channelListLen ;
76
90
}
77
91
78
- // ./ipcmqs -w --pns hy --date 20241102
92
+ // ./ipcmqs -w --pns hy --date 20241102 --jobName cohort
79
93
int main (int argc , char * argv []) {
80
94
int opt ;
81
95
int operation = OTHER_OPERATION ;
82
- char date [9 ] = "" ;
83
- char pns [800 ] = "" ;
96
+ char date [20 ] = "" ;
97
+ char pns [1024 ] = "" ;
84
98
char channelList [2048 ] = "" ;
99
+ char jobName [1024 ] = "" ;
85
100
struct option long_options [] = {
86
101
{"read" , no_argument , 0 , 'r' },
87
102
{"write" , no_argument , 0 , 'w' },
88
103
{"dates" , required_argument , 0 , 'd' },
89
104
{"pns" , required_argument , 0 , 'p' },
90
105
{"channelList" , no_argument , 0 , 'c' },
106
+ {"jobName" , required_argument , 0 , 'j' },
91
107
{0 , 0 , 0 , 0 }
92
108
};
93
109
@@ -108,6 +124,9 @@ int main(int argc, char *argv[]) {
108
124
case 'c' :
109
125
strcpy (channelList , optarg );
110
126
break ;
127
+ case 'j' :
128
+ strcpy (jobName , optarg );
129
+ break ;
111
130
default :
112
131
usage ();
113
132
}
@@ -144,18 +163,19 @@ int main(int argc, char *argv[]) {
144
163
exit (EXIT_SUCCESS );
145
164
}
146
165
147
- parseReceivedMessage (buffer .mdata , date , pns , channelList );
166
+ parseReceivedMessage (buffer .mdata , date , pns , channelList , jobName );
148
167
printf ("dates: %s\n" , date );
149
168
printf ("pns: %s\n" , pns );
150
169
printf ("channelList: %s\n" , channelList );
170
+ printf ("jobName: %s\n" , jobName );
151
171
} else if (operation == WRITE_OPERATION ) {
152
- if (strlen (date ) == 0 || strlen (pns ) == 0 ) {
153
- fprintf (stderr , "Dates and PNs cannot be empty when writing to the message queue.\n" );
172
+ if (strlen (date ) == 0 || strlen (pns ) == 0 || strlen ( jobName ) == 0 ) {
173
+ fprintf (stderr , "Dates, pns jobName cannot be empty when writing to the message queue.\n" );
154
174
exit (EXIT_FAILURE );
155
175
}
156
176
struct msgbuf buffer ;
157
177
buffer .mtype = MSG_TYPE ;
158
- int msgLength = formatMessage (buffer .mdata , date , pns , channelList );
178
+ int msgLength = formatMessage (buffer .mdata , date , pns , channelList , jobName );
159
179
if (msgsnd (msgid , & buffer , msgLength , 0 ) == -1 ) {
160
180
perror ("msgsnd" );
161
181
exit (EXIT_FAILURE );
0 commit comments