Seu cenário funciona perfeitamente aqui para mim.
$ ls -l test*
-rwsr-xr-x 1 root root 6776 Jan 24 17:18 test
-rw-r--r-- 1 chris chris 74 Jan 24 17:18 test.c
-rw-r----- 1 root root 0 Jan 24 17:20 test.txt
$ ./test
ls -l test.txt
-rw-r----- 1 root root 4 Jan 24 17:21 test.txt
$ sudo cat test.txt
100
É possível que você esteja testando seu programa em um sistema de arquivos que não permite executáveis setuid? Execute o comando mount
e procure nosuid
no sistema de arquivos, como aqui:
tmpfs on /tmp type tmpfs (rw,nosuid,nodev,noexec,relatime)