gpt4 book ai didi

c - 如何使用共享文件使用 read() 和 write() 发送和接收消息? (C)

转载 作者:行者123 更新时间:2023-11-30 17:25:15 25 4
gpt4 key购买 nike

所以我有两个程序,一个发送者和一个接收者,分别发送和接收消息(使用信号量)。这是我到目前为止所拥有的代码。

发件人.c

int main(int argc, char *argv[]){
if(argc != 2){
printf("%s [message]\n", argv[0]);
return -1;
}
sem_t *semid = sem_open(SEM_NAME, O_CREAT, 00666, 0);
char *message = argv[1];
int fd = open("channel.txt", O_WRONLY);
write(fd, message, strlen(message));
sem_post(semid);

sem_close(semid);
close(fd);
return 0;
}

接收器.c

int main(int argc, char *argv[]){
char *buf = malloc(256);
sem_t *semid = sem_open(SEM_NAME, O_CREAT, 00666, 0);
int fd = open("channel.txt", O_WRONLY);

while(TRUE){
sem_wait(semid);
lseek(fd, 0, SEEK_SET);
read(fd, buf, sizeof(buf));
printf("receiver [msg arrival]: %s\n", buf);
}

close(fd);
free(buf);
sem_close(semid);
sem_unlink(SEM_NAME);
return 0;
}

发送者能够将消息写入文件“channel.txt”,但接收者将始终打印出空白消息。

最佳答案

这里有两件事。首先,您在接收器中打开只写,这可能会导致您的操作系统无法从文件中读取。

此外,在触发信号量之前,无法保证内容实际上已写入文件。您还应该使用 O_SYNC 选项打开文件,以确保在 write 调用完成之前所有写入实际上已写入硬件,例如

int fd = open("channel.txt", O_WRONLY | O_SYNC);

关于c - 如何使用共享文件使用 read() 和 write() 发送和接收消息? (C),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27091717/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com