Remix.run Logo
1718627440 4 hours ago

> because the handle is independent of the path.

This makes me wonder, what happens [EDIT: on Windows] when a program uses a file, which more than a single hardlink points to, and you want to remove one of them. Does it matter, through which hardlink the file gets opened or are all the hardlinks prevented from being unlinked?

Chu4eeno 3 hours ago | parent | next [-]

On Linux you can delete all hardlinks to open files.

What you can't do is modify a file that's executing (program or library), then you get ETXTBSY.

1718627440 3 hours ago | parent [-]

My question was about Windows, yeah on Linux it obviously doesn't matter, because you can unlink it even if there is only a single hardlink. My bad, I should have written it.

> What you can't do is modify a file that's executing (program or library), then you get ETXTBSY.

Why can't you? Couldn't it do the same thing and just keep it in memory?

Edit: Actually on my system, I can start a program, unlink it and keep using it just fine. I wonder what case you are referring to.

ETXTBSY isn't even descriped in unlink(2), but it is in unlink(3posix): ETXTBSY - The entry to be unlinked is the last directory entry to a pure procedure (shared text) file that is being executed.

yjftsjthsd-h 3 hours ago | parent | prev [-]

Hard links are just pointers to the file. You can remove any or all of them independently of each other and the running program. In fact, IIRC there's a semi-common pattern where a program will deliberately create a file, open it, and then unlink it, which leaves it usable but anonymous and in a state that will always be garbage-collected when the program exits.

1718627440 3 hours ago | parent [-]

On Windows you can't remove a file while a program is using it, that's the topic of the post. To me that implies that Windows can't keep a file around without having a hardlink to it. But what happens when there is more than one hardlink? Hence my question.

yjftsjthsd-h 3 hours ago | parent [-]

Oh, on Windows. I have no idea:)

1718627440 3 hours ago | parent [-]

Yeah, me neither :-)

At most I use GNU/NT.