cuốn sách gpt4 ai đã làm

c - Đọc và viết bằng ống có tên C

In lại Tác giả: Vũ trụ không gian Thời gian cập nhật: 2023-11-04 08:08:32 34 4
mua khóa gpt4 Nike

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.

câu trả lời hay nhất

Bạn đang cố gắng gọi cả FIFO và chương trình đọc là "trình đọc".

Ngoài ra, bạn không có kiểm tra lỗi. bạn không biết đúng không mkfifomở cuộc gọi có thành công hay không. Điều quan trọng là phải thêm phần này trước khi bạn thử khắc phục sự cố.

Về c - đọc và viết với các đường ống được đặt tên trong C, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/41053554/

34 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress