Tôi đang viết một chương trình được cho là chạy vô thời hạn và giữ nguyên giá trị của một biến. Hai chương trình còn lại có thể thay đổi giá trị của biến. Tôi sử dụng các đường dẫn có tên để nhận các giá trị thay đổi và gửi chúng đến một chương trình bên ngoài.
Đây là mã quản lý biến của tôi.
người quản lý.c:
#include
#include
#include
#include
#include
char a = 'a';
void *editTask(void *dummy)
{
int fd;
char* editor = "biên tập viên";
mkfifo(biên tập viên, 0666);
while(1)
{
fd = open(trình soạn thảo, O_RDONLY);
đọc(fd, &a, 1);
đóng(fd);
}
}
void *readTask(void *dummy)
{
int fd;
char* reader = "người đọc";
mkfifo(người đọc, 0666);
while(1)
{
fd = open(reader, O_WRONLY);
viết(fd,&a,1);
đóng(fd);
}
}
int main()
{
pthread_t editor_thread, reader_thread;
pthread_create(&editor_thread, NULL, editTask, NULL);
pthread_create(&reader_thread, NULL, readTask, NULL);
pthread_join (editor_thread, NULL);
pthread_join (reader_thread, NULL);
return 0;
}
Chương trình này sử dụng pthread để lấy riêng giá trị bên ngoài của một biến và chuyển giá trị hiện tại của biến đó cho chương trình bên ngoài.
Chương trình có thể ghi giá trị vào biến là:
nhà văn.c:
#include
#include
#include
#include
#include
int main(int argc, char** argv)
{
nếu(argc != 2)
{
printf("Cần tranh luận!\n");
return 0;
}
int fd;
char * myfifo = "biên tập viên";
fd = open(myfifo, O_WRONLY);
write(fd, argv[0], 1);
đóng(fd);
return 0;
}
Các chương trình có thể đọc giá trị hiện tại là:
reader.c:
#include
#include
#include
#include
#include
int main()
{
int fd;
char * myfifo = "người đọc";
fd = open(myfifo, O_RDONLY);
giá trị char = 'z';
đọc(fd, &value, 1);
printf("Giá trị hiện tại của biến là:%c\n",value);
đóng(fd);
return 0;
}
Tôi chạy các chương trình này trên hệ thống Ubuntu của mình như sau:
$ ./người quản lý &
[1] 5226
$ ./nhà văn k
$ ./người đọc
bash: ./reader: Tệp văn bản đang bận
Tại sao hệ thống của tôi không cho phép tôi chạy chương trình này?
Cảm ơn.
Tôi là một lập trình viên xuất sắc, rất giỏi!